【发布时间】:2019-07-19 12:38:25
【问题描述】:
我正在尝试在一个 微服务 中发布消息并在另一个中获取它,但无法使用 MassTransit 5.5.3 和 RabbitMQ强>。
据我所知,我们不必创建 ReceiveEndpoint 即可发布事件,所以我只是在两个服务中创建相同的消息接口并发布消息,但作为我可以在 RabbitMQ 中看到它要么无处可去(如果未映射到队列)或进入“_skipped”队列。
出版商:
namespace Publisher
{
class Program
{
static async Task Main(string[] args)
{
var bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
IRabbitMqHost host = cfg.Host("host", "vhost", h =>
{
h.Username("xxx");
h.Password("yyy");
});
});
bus.Start();
await bus.Publish<Message>(new { Text = "Hello World" });
Console.ReadKey();
bus.Stop();
}
}
public interface Message
{
string Text { get; set; }
}
}
消费者:
namespace Consumer
{
class Program
{
static async Task Main(string[] args)
{
var bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
IRabbitMqHost host = cfg.Host("host", "vhost", h =>
{
h.Username("xxx");
h.Password("yyy");
});
cfg.ReceiveEndpoint(host, e =>
{
e.Consumer<MbConsumer>();
});
});
bus.Start();
bool finish = false;
while(!finish)
{
await Task.Delay(1000);
}
bus.Stop();
}
}
public interface Message
{
string Text { get; set; }
}
public class MbConsumer : IConsumer<Message>
{
public async Task Consume(ConsumeContext<Message> context)
{
await Console.Out.WriteLineAsync(context.Message.Text);
}
}
}
我希望消费者在消息发布后得到消息,但它没有得到消息。我认为这是因为完整的消息类型不同(“Publisher.Message”与“Consumer.Message”),所以消息合同不同。我应该如何修复此代码以在消费者中获取事件?看起来我缺少一些关于 RabbitMQ 或 MassTransit 的基本知识。
【问题讨论】:
标签: masstransit