MassTransit不发送消息-RabbitMQ
我对MassTransit不发送带有以下代码的消息有一个问题-这是来自Azure服务总线代码的端口,工作正常。GitHub中的示例填充了队列-星巴克示例,因此我的基础结构可以正常工作 有人能告诉我为什么不发送消息吗?我已经创建了队列和交换,并尝试不使用 控制台应用程序打印出预期结果 提前谢谢MassTransit不发送消息-RabbitMQ,rabbitmq,masstransit,Rabbitmq,Masstransit,我对MassTransit不发送带有以下代码的消息有一个问题-这是来自Azure服务总线代码的端口,工作正常。GitHub中的示例填充了队列-星巴克示例,因此我的基础结构可以正常工作 有人能告诉我为什么不发送消息吗?我已经创建了队列和交换,并尝试不使用 控制台应用程序打印出预期结果 提前谢谢 public class Program { static void Main() { IBusControl busControl = Cr
public class Program
{
static void Main()
{
IBusControl busControl = CreateBus();
TaskUtil.Await(() => busControl.StartAsync());
List<Task> tList = new List<Task>();
for (int i = 0; i < 10; i++)
{
var t = Send(busControl);
tList.Add(t);
}
Task.WaitAll(tList.ToArray());
Console.WriteLine("done!");
}
private static async Task Send(IBusControl busControl)
{
var endpoint = await busControl.GetSendEndpoint(new Uri("rabbitmq://localhost/test"));
Console.WriteLine("Sending");
await endpoint.Send(new SomethingHappenedMessage()
{
What = "Stuff",
When = DateTime.Now
});
Console.WriteLine("Sent");
}
static IBusControl CreateBus()
{
return Bus.Factory.CreateUsingRabbitMq(x => x.Host(new Uri("rabbitmq://localhost"), h =>
{
h.Username("guest");
h.Password("guest");
}));
}
}
public interface SomethingHappened
{
string What { get; }
DateTime When { get; }
}
public class SomethingHappenedMessage : SomethingHappened
{
public string What { get; set; }
public DateTime When { get; set; }
}
公共类程序
{
静态void Main()
{
IBusControl-busControl=CreateBus();
TaskUtil.Await(()=>busControl.StartAsync());
List tList=新列表();
对于(int i=0;i<10;i++)
{
var t=发送(总线控制);
t增加(t);
}
Task.WaitAll(tList.ToArray());
控制台。WriteLine(“完成!”);
}
专用静态异步任务发送(IBusControl总线控制)
{
var endpoint=await busControl.GetSendEndpoint(新Uri(“rabbitmq://localhost/test"));
控制台。写入线(“发送”);
wait endpoint.Send(new something happenedMessage())
{
“什么东西”,
When=DateTime.Now
});
控制台。写入线(“已发送”);
}
静态IBusControl CreateBus()
{
返回Bus.Factory.CreateUsingRabbitMq(x=>x.Host(新Uri(“rabbitmq://localhost,h=>
{
h、 用户名(“客人”);
h、 密码(“客人”);
}));
}
}
公共接口发生了什么事
{
字符串什么{get;}
日期时间当{get;}
}
公共课发生了什么事消息:发生了什么事
{
公共字符串What{get;set;}
当{get;set;}时的公共日期时间
}
使用RabbitMQ使用MassTransit发送消息时,默认情况下不会创建队列的绑定。假定服务中的接收端点将创建队列和相关绑定
要确保在发送消息时存在队列和绑定,可以修改端点地址以包含一些额外的查询字符串参数,如下所示:
rabbitmq://localhost/vhost/exchange_name?bind=true&queue=queue_name
对于接收端点,交换名称和队列名称相同。是否将
测试
交换绑定到测试
队列?我将添加在末尾停止总线以确保所有打开的管道完成执行。Chris,绑定队列工作正常,谢谢-我是RabbitMQ新手。这并不能解释为什么星巴克的样品是开箱即用的——但我认为这是MassTransit 2.0。如果你回答的话,我会把它标对的。再次感谢。Starbucks示例添加了消费者,这会创建队列绑定-上面的发件人不会创建接收端点-因此没有消费者。首先,这是用于发送
,而不是发布
-老实说,这应该是您的最后选择。在制作人上线之前启动receiveEndpoints。没那么复杂。不要试图使它变得困难。