【问题标题】:MassTransit not sending messages - RabbitMQMassTransit 不发送消息 - RabbitMQ
【发布时间】:2017-03-22 23:43:01
【问题描述】:

我遇到了 MassTransit 不使用以下代码发送消息的问题 - 这是来自我们的 Azure 服务总线代码的端口,它工作正常。 GitHub 中的示例填充了 Queue - Starbucks 示例,因此我的基础架构正在运行。

谁能建议为什么这不发送消息?我已经创建了队列和交换,并尝试了没有。

控制台应用打印出预期的结果。

提前致谢。

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; }
    }

【问题讨论】:

  • test 交换是否绑定到test 队列?
  • 我会在最后添加停止总线以确保所有打开的管道完成执行。
  • 克里斯,绑定队列有效,谢谢 - 我是 RabbitMQ 的新手。这并不能解释为什么星巴克的样品开箱即用——不过我认为这是 MassTransit 2.0。如果你回答,我会标记它是正确的。再次感谢。
  • Starbucks 示例添加了消费者,这会创建队列绑定 - 您上面的发送者不会创建接收端点 - 所以没有消费者。
  • 首先,这是给Send,而不是Publish - 老实说,这应该是你最后的选择。在您的生产者上线之前启动您的 receiveEndpoints。没那么复杂。不要试图让它变得困难。

标签: rabbitmq masstransit


【解决方案1】:

当您使用 RabbitMQ 通过 MassTransit 发送消息时,默认情况下不会创建队列绑定。假设服务中的接收端点将创建队列和相关绑定。

为确保发送消息时队列和绑定存在,您可以修改端点地址以包含一些额外的查询字符串参数,如下所示:

rabbitmq://localhost/vhost/exchange_name?bind=true&queue=queue_name

在接收端点的情况下,交换名称和队列名称相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多