首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >未在代码中指定的交换上的MassTransit ACCESS_REFUSED

未在代码中指定的交换上的MassTransit ACCESS_REFUSED
EN

Stack Overflow用户
提问于 2019-04-10 23:52:39
回答 1查看 0关注 0票数 0

我正在使用一个非常基本的例子来测试我通过C#与RabbitMq的MassTransit连接。每当我运行此代码连接到我的rabbitMq端点时,只要我将通配符设置为权限,它就可以正常工作。但是,当我在rabbitMq admin中添加权限以仅允许此用户访问test事件时,此代码将失败。

出于某种原因,它会首先尝试连接到我猜的生成的交换名称(通过MassTransit?):

代码语言:javascript
复制
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的工作原理?

这是测试应用程序的代码(我改变了一点,所以它可能无法正常运行,但是,通常代码运行正常):

代码语言:javascript
复制
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权限
正则表达式rabbitmqadmin权限
EN

回答 1

Stack Overflow用户

发布于 2019-04-11 09:43:09

代码是不正确的还是这就是MassTransit的工作原理?

这很可能就是MassTransit的工作原理。请参阅另一个问题:阻止MassTransit为消费者主机创建RabbitMQ交换

我无法在MassTransit文档中的任何位置找到此信息。

您必须configure为包含字符串的交换授予权限dotnet_bus。更不是像其他可能的权限readwrite是必需的。

注意: RabbitMQ团队监控rabbitmq-users 邮件列表,有时只回答StackOverflow上的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档