gpt4 book ai didi

rabbitmq - 使用 EasyNetQ 和 RabbitMQ 来发布和接收消息

转载 作者:行者123 更新时间:2023-12-02 20:27:15 24 4
gpt4 key购买 nike

我是消息传递新手,目前正在使用 RabbitMQ 进行调查作为我们系统架构的一部分,在不同服务之间提供消息传递。我有一个basic RabbitMQ example工作并且它可以通过总线传输基本的文本消息。看起来像 EasyNetQ可以简单地了解使用 RabbitMQ 的一些复杂性,尽管我在让它工作时遇到了一些麻烦。

我想发送一条由以下类表示的更高级的消息,而不仅仅是一个字符串:

public class Message
{
public string Text { get; set; }
public int RandomNumber { get; set; }
public DateTime Date { get; set; }
}

我试图通过将其发布到队列来发送它,然后让订阅者从队列中获取它。我的代码如下:

发布商

using (var bus = RabbitHutch.CreateBus("host=localhost"))
{
var message = new Message() { Text = "Hello World", RandomNumber = new Random().Next(1,100), Date = DateTime.Now };
bus.Publish<Message>(message);
}

接收者

using (var bus = RabbitHutch.CreateBus("host=localhost"))
{
bus.Subscribe<Message>("test", m => Console.WriteLine(string.Format("Text: {0}, RandomNumber: {1}, Date: {2}", m.Text, m.RandomNumber, m.Date)));
}

双方似乎已连接,发布者报告消息已发布:

DEBUG: Trying to connect
INFO: Connected to RabbitMQ. Broker: 'localhost', VHost: '/'
DEBUG: Published UserQuery+Message:query_lzzfst, CorrelationId ec81fc89-4d60-4a8b-8ba2-7a6d0818d2ed

订阅者记录以下内容:

DEBUG: Trying to connect
INFO: Connected to RabbitMQ. Broker: 'localhost', VHost: '/'

订阅者似乎没有连接到队列(或正确的队列),或者我需要做其他事情才能真正接收消息?

最佳答案

抱歉Mun,我是EasyNetQ的主要作者,我才刚刚看到这个。您的问题是,一旦您完成订阅,您就会立即处理该总线,因此您在订阅后立即停止收听。当你的应用程序启动时创建总线,当它关闭时丢弃它。此处的文档解释了为什么您应该这样做:https://github.com/mikehadlow/EasyNetQ/wiki/Connecting-to-RabbitMQ

解决西蒙的观点。他是对的,EasyNetQ 有意设计为仅提供 RabbitMQ 功能的子集,以简化 API。我们目前提供两种模式:发布/订阅和请求/响应。预计很快就会看到基于主题的路由。

关于rabbitmq - 使用 EasyNetQ 和 RabbitMQ 来发布和接收消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9486047/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com