gpt4 book ai didi

java - RabbitMQ 固定回复和消费者配置

转载 作者:太空宇宙 更新时间:2023-11-04 14:21:25 25 4
gpt4 key购买 nike

我的目标是实现以下目标:php 代码将请求发送到队列 - java 代码从代码中读取 - java 代码将回复发送到固定回复队列 - php 代码读取回复。我已经设置了以下测试(生产者现在在 java 中):

POJO:

public class PojoListener {

public String handleMessage(String foo) {
System.out.println("IN MESSAGE RECEIVER!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
return foo.toUpperCase();
}
}

配置:

@Configuration
public class FixedReplyQueueConfig {

@Bean
public ConnectionFactory rabbitConnectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setHost("localhost");
connectionFactory.setUsername("urbanbuz");
connectionFactory.setPassword("ub");
connectionFactory.setVirtualHost("urbanbuzvhost");

return connectionFactory;
}

/**
* @return Rabbit template with fixed reply queue.
*/
@Bean
public RabbitTemplate fixedReplyQRabbitTemplate() {
RabbitTemplate template = new RabbitTemplate(rabbitConnectionFactory());
template.setExchange(ex().getName());
template.setRoutingKey("test");
template.setReplyQueue(replyQueue());
return template;
}

/**
* @return The reply listener container - the rabbit template is the listener.
*/
@Bean
public SimpleMessageListenerContainer replyListenerContainer() {
SimpleMessageListenerContainer container = new SimpleMe ssageListenerContainer();
container.setConnectionFactory(rabbitConnectionFactory());
container.setQueues(replyQueue());
container.setMessageListener(fixedReplyQRabbitTemplate());
return container;
}

/**
* @return The listener container that handles the request and returns the reply.
*/
@Bean
public SimpleMessageListenerContainer serviceListenerContainer() {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(rabbitConnectionFactory());
container.setQueues(requestQueue());
container.setMessageListener(new MessageListenerAdapter(new PojoListener()));
return container;
}

/**
* @return a non-durable auto-delete exchange.
*/
@Bean
public DirectExchange ex() {
return new DirectExchange("ub.exchange", false, true);
}

@Bean
public Binding binding() {
return BindingBuilder.bind(requestQueue()).to(ex()).with("test");
}

/**
* @return an anonymous (auto-delete) queue.
*/
@Bean
public Queue requestQueue() {
return new Queue("ub.request");
}

/**
* @return an anonymous (auto-delete) queue.
*/
@Bean
public Queue replyQueue() {
return new Queue("ub.reply");
}

/**
* @return an admin to handle the declarations.
*/
@Bean
public RabbitAdmin admin() {
return new RabbitAdmin(rabbitConnectionFactory());
}
}

调用main方法:

public class App {  
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(FixedReplyQueueConfig.class);
RabbitTemplate rabbitTemplate = context.getBean(RabbitTemplate.class);

String response = (String) rabbitTemplate.convertSendAndReceive("yalla");
System.out.println("response" + response);
}
}

我有两个问题:

当我运行此命令时,出现以下错误:RabbitTemplate [ERROR] 尽管我看到两个队列都收到了消息,但回复中没有相关 header 。

第二个问题是如何仅运行消费者代码(监听器)而不发送消息(因为最终调用者将不是我的 java 代码)?

最佳答案

这看起来像是基于框架测试用例,显然是有效的。

您是否正在向 ub.reply 发送任何其他消息?是空的吗?

获取该日志消息的唯一方法是模板收到的回复没有正确填充的相关 ID 属性。

您只需运行应用程序并删除所有客户端代码,容器将监听入站请求。

关于java - RabbitMQ 固定回复和消费者配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27150773/

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