使用 Spring Cloud Spring Service Connector with RabbitMQ 并启动发布者配置功能
Use Spring Cloud Spring Service Connector with RabbitMQ and start publisher config function
我将 RabbitMQ 与 sprin 云配置连接:
@Bean
public ConnectionFactory rabbitConnectionFactory() {
Map<String, Object> properties = new HashMap<String, Object>();
properties.put("publisherConfirms", true);
RabbitConnectionFactoryConfig rabbitConfig = new RabbitConnectionFactoryConfig(properties);
return connectionFactory().rabbitConnectionFactory(rabbitConfig);
}
2.Set rabbitTemplate.setMandatory(真) 和 setConfirmCallback():
@Bean
public RabbitTemplate rabbitTemplate() {
RabbitTemplate template = new RabbitTemplate(connectionFactory);
template.setMandatory(true);
template.setMessageConverter(new Jackson2JsonMessageConverter());
template.setConfirmCallback((correlationData, ack, cause) -> {
if (!ack) {
System.out.println("send message failed: " + cause + correlationData.toString());
} else {
System.out.println("Publisher Confirm" + correlationData.toString());
}
});
return template;
}
3.Send 消息排队以调用 publisherConfirm 并打印日志。
@Component
public class TestSender {
@Autowired
private RabbitTemplate rabbitTemplate;
@Scheduled(cron = "0/5 * * * * ? ")
public void send() {
this.rabbitTemplate.convertAndSend(EXCHANGE, "routingkey", "hello world",
(Message m) -> {
m.getMessageProperties().setHeader("tenant", "aaaaa");
return m;
}, new CorrelationData(UUID.randomUUID().toString()));
Date date = new Date();
System.out.println("Sender Msg Successfully - " + date);
}
}
但是 publisherConfirm 还没有 worked.The 日志还没有打印出来。不管是真是假,log都不能少。
确认不需要必填项,只需returns。
一些尝试:
- 打开 DEBUG 日志记录以查看它是否有帮助;生成了一些关于确认的日志。
- 添加一些代码
.
template.execute(channel -> {
system.out.println(channel.getClass());
return null;
}
如果您没有看到 PublisherCallbackChannelImpl
,则表示配置由于某种原因无法正常工作。同样,DEBUG 日志记录应该有助于配置调试。
如果您仍然无法弄明白,请将您的应用程序剥离到表现出该行为的最低限度,并 post 完整的应用程序。
我将 RabbitMQ 与 sprin 云配置连接:
@Bean
public ConnectionFactory rabbitConnectionFactory() {
Map<String, Object> properties = new HashMap<String, Object>();
properties.put("publisherConfirms", true);
RabbitConnectionFactoryConfig rabbitConfig = new RabbitConnectionFactoryConfig(properties);
return connectionFactory().rabbitConnectionFactory(rabbitConfig);
}
2.Set rabbitTemplate.setMandatory(真) 和 setConfirmCallback():
@Bean
public RabbitTemplate rabbitTemplate() {
RabbitTemplate template = new RabbitTemplate(connectionFactory);
template.setMandatory(true);
template.setMessageConverter(new Jackson2JsonMessageConverter());
template.setConfirmCallback((correlationData, ack, cause) -> {
if (!ack) {
System.out.println("send message failed: " + cause + correlationData.toString());
} else {
System.out.println("Publisher Confirm" + correlationData.toString());
}
});
return template;
}
3.Send 消息排队以调用 publisherConfirm 并打印日志。
@Component
public class TestSender {
@Autowired
private RabbitTemplate rabbitTemplate;
@Scheduled(cron = "0/5 * * * * ? ")
public void send() {
this.rabbitTemplate.convertAndSend(EXCHANGE, "routingkey", "hello world",
(Message m) -> {
m.getMessageProperties().setHeader("tenant", "aaaaa");
return m;
}, new CorrelationData(UUID.randomUUID().toString()));
Date date = new Date();
System.out.println("Sender Msg Successfully - " + date);
}
}
但是 publisherConfirm 还没有 worked.The 日志还没有打印出来。不管是真是假,log都不能少。
确认不需要必填项,只需returns。
一些尝试:
- 打开 DEBUG 日志记录以查看它是否有帮助;生成了一些关于确认的日志。
- 添加一些代码
.
template.execute(channel -> {
system.out.println(channel.getClass());
return null;
}
如果您没有看到 PublisherCallbackChannelImpl
,则表示配置由于某种原因无法正常工作。同样,DEBUG 日志记录应该有助于配置调试。
如果您仍然无法弄明白,请将您的应用程序剥离到表现出该行为的最低限度,并 post 完整的应用程序。