【问题标题】:MassTransit w/ RabbitMQ - declaring a durable exchange?带有 RabbitMQ 的 MassTransit - 声明持久交换?
【发布时间】:2014-03-07 03:17:40
【问题描述】:

默认情况下,MassTransit 似乎正在使用临时交换。我在这里看到 DeclareExchange 和 BindQueue 方法都有一个持久开关:

https://github.com/phatboyg/MassTransit/blob/217d51b9d6ea19d5b01904dcceb7bacd399ace67/src/Transports/MassTransit.Transports.RabbitMq/RabbitMqConnection.cs

我希望这会有点简单...类似于 EasyNetQ,您可以在其中访问高级总线属性,切换持久标志,然后您就完成了...

但是,我没有找到您可以在总线配置中实际访问 RabbitMqConnection 对象并调用这些方法的位置。

任何人碰巧有一个如何使用 DeclareExchange 方法的示例?

更新:默认行为实际上是持久的。问题是由于取消订阅所致。

【问题讨论】:

    标签: masstransit


    【解决方案1】:

    默认情况下,所有交换和队列都是持久的,包括交换之间的任何绑定。

    唯一不持久的交换是那些必须发布私有类事件的交换,它们被声明为临时的,以避免在连接关闭后用一堆内部/私有类名称和绑定混淆虚拟主机。

    唯一的另一种方法是地址 URI 包括:

    ?temporary=true
    

    在这种情况下,它会将其声明为临时的。这通常用于临时消费者需要临时队列/交换/绑定时,一旦进程退出就会消失。

    【讨论】:

    • 谢谢,周一会仔细看看,虽然我不记得有任何私人课程。该代码是一个 Windows 服务。我们停止服务,交换消失。我们还没有看到其他兔子 api 的这种行为。
    • 可能还有助于显示一些配置/消费者订阅代码,因为您可以取消订阅,如果订阅不是永久的,这可能会删除绑定。
    • 内部类被发布为非持久的行为让我有些头疼,因为在开发过程中将类从内部更改为公共然后在其他时间部署应用程序的两个部分意味着一个希望队列是持久的,而其他不是,这真的很奇怪,也不是很明显。
    • 我可以看到这令人困惑。还有为什么强烈推荐只为消息合约使用接口。
    猜你喜欢
    • 1970-01-01
    • 2012-12-26
    • 2011-09-03
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 2023-03-15
    • 2019-02-01
    • 1970-01-01
    相关资源
    最近更新 更多