是否可以使 MessageHeaders.ID 在 Spring 集成中不是瞬态的?
Is it possible to make MessageHeaders.ID not transient in Spring Integration?
我正在尝试通过 Spring 云流源发送消息。接收消息的应用程序需要 id
header 存在。我无法更改此要求,因此我需要找到一种方法来确保 id
header 映射到我的外发消息。
我注意到 id
header 被映射到 message_id
属性。经过更多挖掘后,我意识到这是因为 id
header 被声明为瞬态 here.
有没有办法确保 id
header 在发送消息时持续存在?
我无法使用 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);
}
我正在尝试通过 Spring 云流源发送消息。接收消息的应用程序需要 id
header 存在。我无法更改此要求,因此我需要找到一种方法来确保 id
header 映射到我的外发消息。
我注意到 id
header 被映射到 message_id
属性。经过更多挖掘后,我意识到这是因为 id
header 被声明为瞬态 here.
有没有办法确保 id
header 在发送消息时持续存在?
我无法使用 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);
}