簡體   English   中英

未在代碼中指定的交易所進行MassTransit ACCESS_REFUSED

[英]MassTransit ACCESS_REFUSED on exchange not specified in the code

我正在使用一個非常基本的示例來測試我的MassTransit通過C#與RabbitMq的連接。 每當我運行此代碼以連接到RabbitMq端點時,只要我將通配符設置為許可,它就可以正常工作。 但是,當我在rabbitMq管理員中添加權限以僅允許該用戶訪問test事件時,此代碼將失敗。

由於某種原因,它將首先嘗試連接到我猜是由MassTransit生成的交換名稱:

RabbitMQ.Client.Exceptions.OperationInterruptedException: 'The AMQP operation was interrupted: AMQP close-reason, initiated by Peer, code=403, text="ACCESS_REFUSED - access to exchange '*ComputerName*_dotnet_bus_73451gfsgerqwrefxfddgf' in vhost '/' refused for user 'user'", classId=40, methodId=10, cause='

因此,交換*ComputerName*_dotnet_bus_73451gfsgerqwrefxfddgf ,之后它將嘗試連接到test交換。 當然,我可以將ComputerName....交換添加到權限,但是對於每台嘗試運行此代碼的計算機,都需要這樣做。 為什么MassTransit嘗試連接到此交換機? 代碼不正確,或者這只是MassTransit的工作方式嗎?

這是測試應用程序的代碼(我對此進行了一些更改,以使其可能無法正常運行,但是總體而言,該代碼運行良好):

using System;
using MassTransit;

namespace Test
{
    public class Testing
    {
        public string Id { get; set; }
    }
}

namespace Consumer
{
    class Program
    {
        static void Main(string[] args)
        {
            var bus = Bus.Factory.CreateUsingRabbitMq(sbc =>
            {
                var host = sbc.Host(new Uri("rabbitmq://servername"), h =>
                {
                    h.Username("user");
                    h.Password("user");
                });

                sbc.ReceiveEndpoint(host, "test", ep =>
                {
                    ep.Handler<Testing>(context =>
                    {
                        return Console.Out.WriteLineAsync($"Received: {context.Message.Id}");
                    });
                });
            });

            bus.Start();

            // For testing purposes, we send a message ourselves.
            bus.Publish(new Testing { Id = "X" });

            Console.WriteLine("Waiting for messages. Press any key to exit");
            Console.ReadKey();

            bus.Stop();
        }
    }
}

rabbitMq管理員用戶權限的圖像:

正則表達式rabbitmqadmin權限

代碼不正確,或者這只是MassTransit的工作方式嗎?

這很可能就是MassTransit的工作方式。 看到另一個問題: 阻止MassTransit為使用者主機創建RabbitMQ交換

奇怪的是,我在MassTransit文檔中的任何地方都找不到此信息。

您必須為包含字符串dotnet_bus交換授予configure權限。 更不是像其他可能的權限readwrite是必需的。


注意: RabbitMQ團隊監視rabbitmq-users 郵件列表 ,僅在某些情況下回答關於StackOverflow的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM