[英]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管理員用戶權限的圖像:
代碼不正確,或者這只是MassTransit的工作方式嗎?
這很可能就是MassTransit的工作方式。 看到另一個問題: 阻止MassTransit為使用者主機創建RabbitMQ交換
奇怪的是,我在MassTransit文檔中的任何地方都找不到此信息。
您必須為包含字符串dotnet_bus
交換授予configure
權限。 更不是像其他可能的權限read
和write
是必需的。
注意: RabbitMQ團隊監視rabbitmq-users
郵件列表 ,僅在某些情況下回答關於StackOverflow的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.