MassTransit不发送消息-RabbitMQ

MassTransit不发送消息-RabbitMQ,rabbitmq,masstransit,Rabbitmq,Masstransit,我对MassTransit不发送带有以下代码的消息有一个问题-这是来自Azure服务总线代码的端口,工作正常。GitHub中的示例填充了队列-星巴克示例,因此我的基础结构可以正常工作 有人能告诉我为什么不发送消息吗?我已经创建了队列和交换,并尝试不使用 控制台应用程序打印出预期结果 提前谢谢 public class Program { static void Main() { IBusControl busControl = Cr

我对MassTransit不发送带有以下代码的消息有一个问题-这是来自Azure服务总线代码的端口,工作正常。GitHub中的示例填充了队列-星巴克示例,因此我的基础结构可以正常工作

有人能告诉我为什么不发送消息吗?我已经创建了队列和交换,并尝试不使用

控制台应用程序打印出预期结果

提前谢谢

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。没那么复杂。不要试图使它变得困难。