簡體   English   中英

使用MassTransit使用交換和路由密鑰發布消息

[英]Publish message using exchange and routing key using MassTransit

我一直在看MassTransit幾個星期了,我很好奇這些可能性。 但是,我似乎無法將這些概念完全正確。

預期的行為我想用路由密鑰將消息發布到“直接”交換,路由密鑰綁定到兩個不同的隊列以執行其他活動。

當我使用MassTransit嘗試相同的邏輯以獲得更好的可伸縮性時。 我發現MassTransit根據扇出類型的隊列名稱創建自己的交換。

通過交換和路由密鑰發布消息的經典代碼

using (var connection = factory.CreateConnection())
        {
            using (var channel = connection.CreateModel())
            {
                channel.ExchangeDeclare(exchange, "direct");

                var body = Encoding.UTF8.GetBytes(message);

                channel.BasicPublish(exchange, routingKey, null, body);
                Console.WriteLine(" [x] Sent {0}", message);
            }
        }

有沒有辦法在MassTransit中使用routingkey配置直接或主題交換?

MassTransit不支持這種情況。 MassTransit將始終創建扇出隊列。 如果您自己管理拓撲,則可以使用IEndpoint.Send直接將消息發送到您創建的交換。 在這種情況下,你會放棄很多MT提供的東西。

我也不確定在這種情況下“更好的可擴展性”是什么意思。 扇出交換比直接交換(大多數情況下)更好,因為沒有需要處理的路由邏輯。

也許如果您在MassTransit郵件列表中澄清了您的性能問題,我們可以在那里幫助您。

MassTransit在不使用主題交換的情況下處理發布和訂閱,而是為正在發布的消息類型創建交換,並將這些交換綁定到使用者隊列。

RabbitMQ的路由密鑰方法效率較低,RabbitMQ更喜歡使用交換結構來簡化消息路由(不需要維護哈希表)。

不要處理交換和路由鍵,只需定義命令和/或事件類型,發送或發布這些消息,讓消費者完成他們的工作。

以下代碼執行相同的工作,但有一個額外的扇出交換:

TestMessage(直接交換) - > TestMessage_Queue(扇出交換) - > TestMessage_Queue(隊列)

var bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
    var host = cfg.Host(new Uri("rabbitmq://localhost"), h =>
    {
        h.Username("guest");
        h.Password("guest");
    });
    cfg.Send<TestMessage>(x => { x.UseRoutingKeyFormatter(context => "routingKey"); });
    cfg.Message<TestMessage>(x => x.SetEntityName("TestMessage"));
    cfg.Publish<TestMessage>(x => { x.ExchangeType = ExchangeType.Direct; });
    cfg.ReceiveEndpoint(host, "TestMessage_Queue", e =>
    {
        e.BindMessageExchanges = false;
        e.Consumer<UpdateCustomerConsumer>();
        e.Bind("TestMessage", x =>
        {
            x.ExchangeType = ExchangeType.Direct;
            x.RoutingKey = "routingKey";
        });
    });
});

bus.Start();

暫無
暫無

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

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