NSB 8 在 RabbitMQ 中创建交换时使用命名空间:类。像这样:
PMSRecalc.MessageHandling:CompetitorDataIsReady
使用 Camels RabbitMQ 插件从 quarkus 发送消息时会出现问题。
如何使用名称空间-类名之类的内容覆盖默认命名约定
PMSRecalc.MessageHandling-CompetitorDataIsReady
目前在 quarkus,我正在使用这个 hack
#在名称中使用带有冒号“:”的交换是很棘手的,因为组件认为我们使用旧的服务器:端口语法
#使用三个斜杠强制使用旧语法可以解决问题 - 第三个斜杠之后的文本只能解释为交换名称
outnsb:rabbitmq:///TradingService.Messages:NetAssetValueMessageList?exchangeType=fanout&routingKey=nav&skipQueueDeclare=true&autoDelete=false
我听说在新的 spring 版本中,camel 的 RabbitMQ 组件将删除这个 hack。还没尝试过,但我想做好准备。也想摆脱这个警告
旧语法rabbitmq://hostname:port/exchangeName 已弃用..
阅读 NSB 文档几个小时后,我发现了这个段落
var transport = endpointConfiguration.UseTransport<RabbitMQTransport>();
transport.UseCustomRoutingTopology(
topologyFactory: createDurableExchangesAndQueues =>
{
return new MyRoutingTopology(createDurableExchangesAndQueues);
});
我反编译了ConventionalRoutingTopology类并对构造函数做了一些小修改
public CustomConventionalRoutingTopology(bool durable, QueueType queueType)
{
_durable = durable;
_queueType = queueType;
_exchangeNameConvention = type => type.Namespace + "_" + type.Name;
}
并使用我的新自定义类,如下所示:
var transport = epc.UseTransport<RabbitMQTransport>()
.ConnectionString(config.ConnectionString)
.UseCustomRoutingTopology(topologyFactory:
createDurableExchangesAndQueues =>
new
CustomConventionalRoutingTopology(createDurableExchangesAndQueues,
QueueType.Classic));
我仍然对不需要自定义代码的解决方案非常感兴趣。