c# - 我需要一个如何使用 EasyNetQ 库向多个接收者广播相同消息的示例
问题描述
我正在尝试使用 EasyNetQ 从 RabbitMQ 发送和接收消息,我需要将相同的消息发送给多个接收者或当时连接的人。
我尝试过发布-订阅消息传递模式,它工作得很好,但它更像是循环,一旦接收者收到消息,它就会从队列中删除,其他人都看不到该消息。
这是我的消息发件人。
for (int i = 0; i < 10; i++)
{
using (IBus bus = RabbitHutch.CreateBus(Host))
{
bus.Publish(new TextMessage { Text = $"{i}: Hello World from EasyNetQ" }, "dashboard");
}
}
这是我的接收器。
公共无效GetMessages(){
using (IBus bus = RabbitHutch.CreateBus(Host))
{
bus.Subscribe<TextMessage>("dashboard", HandleTextMessage);
Console.WriteLine("Listening for messages. Hit <return> to quit.");
Console.ReadLine();
}
}
static void HandleTextMessage(TextMessage textMessage)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Got message: {0}", textMessage.Text);
Console.ResetColor();
}
收到消息后,没有其他接收者可以看到该消息,我需要所有连接的接收者看到相同的消息。
解决方案
实际上,在大多数情况下,EasyNetQ 将使您不必处理交换。要实现您的要求,只需在订阅时指定不同的订阅 ID,例如 GUID:
public void GetMessages()
{
using (IBus bus = RabbitHutch.CreateBus(Host))
{
bus.Subscribe<TextMessage>(Guid.NewGuid().ToString(), HandleTextMessage);
Console.WriteLine("Listening for messages. Hit <return> to quit.");
Console.ReadLine();
}
}
static void HandleTextMessage(TextMessage textMessage)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Got message: {0}", textMessage.Text);
Console.ResetColor();
}
更多信息在这里: https ://github.com/EasyNetQ/EasyNetQ/wiki/Subscribe
推荐阅读
- python - 在python中发送多个文件
- apache-kafka - Kafka Mirror Maker 无法复制 __consumer_offset 主题
- python - 在嵌套字典上使用 for 循环
- python - 没有根的 Python setup.py
- matlab - 显示 gscatter 图的剩余图例条目
- python - 在python中计算二维网格上的组的有效方法是什么?[下图]
- nvidia - NVidia OptiX:在 PathTracer 示例中加载 OBJ
- r - 数据框R中每10行后的列值总和
- javascript - 在调整大小时更改内容的优雅方法是什么
- javascript - Javascript 覆盖 CSS