rabbitmq 代码中未指定交换机上的MassTransit ACCESS_REFUSED

cgfeq70w  于 12个月前  发布在  RabbitMQ
关注(0)|答案(1)|浏览(164)

我使用一个非常基本的例子来测试我的MassTransit连接到rabbitMq通过C#。每当我运行这段代码连接到我的rabbitMq端点时,只要我有一个设置为权限的权限,它就可以正常工作。但是,当我在rabbitMq admin中添加权限以仅允许此用户访问test事件时,此代码将失败。
出于某种原因,它将首先尝试连接到一个交换名称,我猜是产生(由大众运输?):

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....交换添加到权限中,但这需要为每台试图运行此代码的计算机完成。为什么大众运输试图连接到这个交换?是代码不正确还是这只是大众运输的工作方式?
这是测试应用程序的代码(我稍微修改了一下,所以它可能不会立即运行,但是,通常代码运行良好):

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 admin用户权限图片:

toe95027

toe950271#

是代码不正确还是这只是大众运输的工作方式?
更有可能的是,这就是大众运输的工作方式。看另一个问题:Prevent MassTransit from creating a RabbitMQ exchange for a consumer host
奇怪的是,我在公共交通文件中找不到这些信息。
您必须为包含字符串dotnet_bus的交换授予configure权限。很可能需要其他权限,如readwrite

相关问题