gpt4 book ai didi

java - 如何使用 rabbitTemplate receiveAndReply

转载 作者:行者123 更新时间:2023-11-30 08:51:21 27 4
gpt4 key购买 nike

我刚刚开始尝试使用 Spring 和 rabbitMQ。我想用 rabbit 和 spring 创建一个微服务基础设施,我一直在关注Spring boot tutorial

但它非常简单。我也在查看有关如何创建 RPC 的文档(springsRabbit),我了解 Rabbits 方法,但我想利用 Spring 模板来保存样板文件。

我似乎不明白在哪里注册 reciveAndReplay 回调。

我试过这样做:

发送

    System.out.println("Sending message...");
Object convertSendAndReceive = rabbitTemplate.convertSendAndReceive("spring-boot", "send and recive: sent");
System.out.println("GOT " + convertSendAndReceive); //is null

接收

@Component
public class Receiver {
@Autowired
RabbitTemplate rabbitTemplate;
public void receiveMessage(String message) {
this.rabbitTemplate.receiveAndReply("spring-boot", (Message)->{
return "return this statement";
});
}
}

但这并不奇怪,因为收到消息但没有任何回复。我假设这需要在 bean 创建级别的工厂/模板中的某个地方注册,但我似乎不明白在哪里,遗憾的是文档不清楚。

最佳答案

首先,请使用Spring AMQP Documentation .

您通常会使用 SimpleMessageListenerContainer 与 POJO 监听器连接以进行 RPC。

模板 receiveAndReply 方法适用于“预定的”服务器端 RPC - 即仅在您需要时接收(和回复),而不是在消息到达队列时接收(和回复)。它不会阻止等待消息。

如果你想使用receiveAndReply(),有一个test case that illustrates it .

编辑:

这段代码...

    this.template.convertAndSend(ROUTE, "test");

向队列发送消息。

这段代码...

    this.template.setQueue(ROUTE);
boolean received = this.template.receiveAndReply(new ReceiveAndReplyMessageCallback() {

@Override
public Message handle(Message message) {
message.getMessageProperties().setHeader("foo", "bar");
return message;
}
});

从该队列接收消息;添加标题并将相同的消息返回到回复队列。如果没有要接收(和回复)的消息,received 将为 false。

这段代码:

    Message receive = this.template.receive();

收到回复。

这个测试有点做作,因为回复被发送到与请求相同的队列。在此测试中,我们不能在客户端使用 sendAndReceive(),因为线程会阻塞等待回复(我们需要执行 receiveAndReply())。

Another test in that class有一个更实际的例子,它在不同的线程上执行 sendAndReceive(),在主线程上执行 receiveAndReply()

请注意,该测试在客户端使用监听器容器进行回复;通常不再需要,因为兔子经纪人现在支持 direct reply-to .

receiveAndReply() 是为了对称而添加的 - 在大多数情况下,人们使用监听器容器和监听器适配器进行服务器端 RPC。

关于java - 如何使用 rabbitTemplate receiveAndReply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30596119/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com