1

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

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

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

4

1 回答 1

0

我无法使用 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);
    }

于 2021-06-15T02:24:20.657 回答