使用应用程序生成的标识符的Spring AMQP自定义消息关联

时间:2017-11-01 00:32:55

标签: spring-amqp

Spring AMQP自定义消息关联,使用应用程序为使用spring集成的出站网关生成的标识符。

我们需要将出站网关的消息与app生成的id相关联,其中消息的实际处理将在外部系统中发生,请求的响应将来自外部系统,所以我们不能依赖amqp_correlation数据。

如果您提供的步骤很棒。

已尝试解决方案

  1. 在兔子模板中设置相关键
  2. 创建AMQP类型的消息,设置标题名称,并在模板中设置具有一些生成值的相关键
  3. 在AMQP出站网关中为自定义标头名称
  4. 提供标头映射器

    结果

    Rabbit模板能够使用自定义标头进行映射,但它会生成自己的值,不使用请求/回复消息中设置的值

1 个答案:

答案 0 :(得分:1)

请为此打开new feature JIRA Issue

请记住,确保correlationId是唯一的是您的责任。

您可以通过继承模板并覆盖sendToRabbit来解决此问题;并在那里设置correlationId;你必须保存模板的correlationId(理想情况下,在不同标题的消息中,但可能在Map中)并让服务器也返回该标题。

protected void sendToRabbit(Channel channel, String exchange, String routingKey, boolean mandatory,
        Message message) throws IOException {
    // fix up properties
    super.doSend(...);
}

您还必须覆盖onMessage()以恢复入站请求的正确correlationId。