我的代码:
public interface IMessage
{
string Text { get; set; }
}
public class Program
{
public static void Main()
{
var bus = Bus.Factory.CreateUsingRabbitMq(sbc =>
{
var host = sbc.Host(new Uri("rabbitmq://localhost"), h =>
{
h.Username("guest");
h.Password("guest");
});
});
bus.Start();
bus.ConnectConsumer<TestConsumer>();
bus.Publish<IMessage>(new { Text = "Hi" });
Console.WriteLine("Press any key to exit");
Console.ReadKey();
bus.Stop();
}
}
public class TestConsumer : IConsumer<IMessage>
{
public Task Consume(ConsumeContext<IMessage> context)
{
Console.Out.WriteLineAsync($"Received: {context.Message.Text}");
return Task.CompletedTask;
}
}
我不知道消息发送到哪里,因为没有指定任何队列,因此我不知道如何使用消息。
有没有一种方法可以指定在总线定义之外发送和写入消息的队列?
我遗漏了什么?
发布于 2019-06-11 17:13:43
您在此处发布的内容
bus.Publish(new { Text = "Hi" });
是一个匿名类型,而不是您订阅的IMessage,我认为您需要创建IMessage接口,然后创建一些实现IMessage的类并通过总线发送
发布于 2019-06-12 03:31:53
而不是使用:
bus.ConnectConsumer<TestConsumer>();
考虑使用:
sbc.ReceiveEndpoint("queue-name", e => e.Consumer<TestConsumer>());
这将创建一个名为" queue -name“的队列,并将您的使用者连接到该队列。
如果您需要在事后将接收端点连接到总线,您可以使用:
host.ConnectReceiveEndpoint("queue-name", e => e.Consumer<TestConsumer>());
您需要从配置中保存主机,但它允许您在总线启动后添加接收端点。
https://stackoverflow.com/questions/56539142
复制相似问题