Mun*_*Mun 7 message-queue rabbitmq easynetq
我是消息传递的新手,目前正在调查使用RabbitMQ作为我们系统架构的一部分,以提供不同服务之间的消息传递.我有一个基本的RabbitMQ示例工作,它可以通过总线传输基本文本消息.看起来EasyNetQ可能只是使用RabbitMQ的一些复杂性,尽管我在使用它时遇到了一些麻烦.
我想发送一个由以下类表示的更高级的消息,而不仅仅是一个字符串:
public class Message
{
public string Text { get; set; }
public int RandomNumber { get; set; }
public DateTime Date { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我试图通过将其发布到队列来发送它,然后让订阅者从队列中取出它.我的代码如下:
出版者
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);
}
Run Code Online (Sandbox Code Playgroud)
接收器
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)));
}
Run Code Online (Sandbox Code Playgroud)
双方似乎都联系在一起,并且发布者报告该消息已发布:
DEBUG: Trying to connect
INFO: Connected to RabbitMQ. Broker: 'localhost', VHost: '/'
DEBUG: Published UserQuery+Message:query_lzzfst, CorrelationId ec81fc89-4d60-4a8b-8ba2-7a6d0818d2ed
Run Code Online (Sandbox Code Playgroud)
订户记录以下内容:
DEBUG: Trying to connect
INFO: Connected to RabbitMQ. Broker: 'localhost', VHost: '/'
Run Code Online (Sandbox Code Playgroud)
看起来订阅者要么没有连接到队列(或正确的队列),要么我还需要做其他事情来实际接收消息?
Mik*_*low 17
对不起Mun,我是EasyNetQ的主要作者,我刚看到这个.您的问题是您在完成订阅后立即处理了公交车,因此您在订阅后立即停止收听.在应用启动时创建总线,在关闭时将其丢弃.为什么你应该这样做在这里的文档解释:https://github.com/mikehadlow/EasyNetQ/wiki/Connecting-to-RabbitMQ
解决西蒙的观点.他是对的,EasyNetQ有意设计为仅提供RabbitMQ的一部分功能,以简化API.我们目前提供两种模式:pub/sub和request/response.期待很快看到基于主题的路由.
归档时间: |
|
查看次数: |
7919 次 |
最近记录: |