【问题标题】:Is it possible to make MessageHeaders.ID not transient in Spring Integration?是否可以在 Spring Integration 中使 MessageHeaders.ID 不是瞬态的?
【发布时间】:2020-04-02 05:22:42
【问题描述】:

我正在尝试通过 Spring Cloud Stream Source 发送消息。接收消息的应用程序要求存在id 标头。我无法更改此要求,因此我需要找到一种方法来确保 id 标头映射到我的外发消息。

我注意到 id 标头被映射到 message_id 属性。经过一番挖掘,我意识到这是因为id 标头被声明为瞬态here

有没有办法确保id 标头在发送消息时仍然存在?

【问题讨论】:

    标签: java spring spring-boot spring-integration-amqp


    【解决方案1】:

    我无法使用 Spring Cloud Stream 解决这个问题。相反,我恢复使用 Spring AMQP。

    这是我的解决方案:

    import org.springframework.amqp.core.MessageBuilder;
    import org.springframework.amqp.core.MessageProperties;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    
    import java.util.UUID;
    
    @Service
    public class ExampleService {
    
        String exchange = "exchangeName";
        String queue = "queueName";
    
        @Autowired
        RabbitTemplate rabbitTemplate;
    
        public void sendMessage() {
                final var jsonToQueue = "{\"message\":\"test message\"}";
                final var message = MessageBuilder.withBody(jsonToQueue.getBytes())
                        .setContentType(MessageProperties.CONTENT_TYPE_JSON)
                        .setHeader("id", UUID.randomUUID())
                        .build();
                rabbitTemplate.send(exchange, queue, message);
        }
    
    

    【讨论】:

      猜你喜欢
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-21
      • 2017-06-06
      • 1970-01-01
      相关资源
      最近更新 更多