Spring boot 兔子模板确认回调不工作

Spring boot 兔子模板确认回调不工作,spring-boot,spring-amqp,Spring Boot,Spring Amqp,我让subscriber和publisher subscriber收集消息,一旦达到收集的指定消息数,它就会将控制权传递给publisher 我需要将消息发布到不同的队列,成功发布每条消息后,我需要手动确认订阅的队列以删除消息。 我在rabbit模板上使用了return callback和confirm callback,但成功发布消息时不会调用回调函数 我想问题是发布者和消费者使用相同的连接,这就是为什么不调用回调,但我不确定 @springboot应用程序 @ComponentScan(ba

我让subscriber和publisher subscriber收集消息,一旦达到收集的指定消息数,它就会将控制权传递给publisher 我需要将消息发布到不同的队列,成功发布每条消息后,我需要手动确认订阅的队列以删除消息。 我在rabbit模板上使用了return callback和confirm callback,但成功发布消息时不会调用回调函数

我想问题是发布者和消费者使用相同的连接,这就是为什么不调用回调,但我不确定

@springboot应用程序
@ComponentScan(basePackages={“com.comp.dftp.scriber.configuration”,“com.comp.dftp.scriber.container”,
“com.comp.dftp.scriber.subscriber”、“com.comp.dftp.scriber.publisher”})
@EnableAutoConfiguration(exclude=RabbitAutoConfiguration.class)
@使能兔
公共类DFTPSCrubberapplication{
私有静态最终记录器Logger=LoggerFactory.getLogger(dftppscrubberapplication.class);
兔李斯特登记员;
AppConfig-AppConfig;
公共静态void main(字符串[]args){
SpringApplication app=新的SpringApplication(dftpscrubberapplication.class);
ConfigurableApplicationContext appContext=app.run(args);
}
@发情前期
public void graceFullExit(){
LOGGER.info(“--------------停止洗涤器容器-----------------”;
if(register!=null&®ister.getEndpointRegistry()!=null){
register.getEndpointRegistry().stop();
}
info(“容器已成功停止!”);
/*
*如果应用程序未准备好安全退出,我们将称重30秒
*然后再次检查,这将一直持续到标志ReadyToGraccefullyExit
*一旦publisher完成了流程,则将该流程设置为“真”,该流程尚未完成
*读者回复出版商。
*/
而(!appConfig.isReadyToGraccefullyExit()){
试一试{
线程。睡眠(30*1000);
appConfig.setReadyToGraccefullyExit(true);/*这只是用于测试*/
}捕捉(中断异常e){
error(“正常退出应用程序时出现错误!”,e);
}
}
LOGGER.info(“####从生命周期中停止”###;”;
}
}
```爪哇
@组成部分
@配置
公共类EPPQ2ListenerConfigurer实现RabbitListenerConfigurer{
公共EPPQ2ListenerConfigurer(ConfigurableApplicationContext ctx){
//TODO自动生成的构造函数存根
}
@凌驾
public void configureRabbitListeners(RabbitListenerEndpointRegistrator){
setMessageHandlerMethodFactory(messageHandlerMethodFactory());
}
@豆子
MessageHandlerMethodFactory MessageHandlerMethodFactory(){
DefaultMessageHandlerMethodFactory messageHandlerMethodFactory=新的DefaultMessageHandlerMethodFactory();
messageHandlerMethodFactory.setMessageConverter(consumerJackson2MessageConverter());
返回消息HandlerMethodFactory;
}
@豆子
公共映射Jackson2MessageConverter使用者Ackson2MessageConverter(){
返回新的MappingJackson2MessageConverter();
}
}
```爪哇
@配置
公共类ListenerContainerFactory{
静态最终记录器Logger=LoggerFactory.getLogger(ListenerContainerFactory.class);
@自动连线
RabbitMqConfig RabbitMqConfig;
@自动连线
EPPQ2订阅接收机;
公共ListenerContainerFactory(可配置应用程序上下文ctx){
printContainerStartMsg();
}
私有void printContainerStartMsg(){
logger.info(“--------------洗涤器容器启动-----------------”;
}
@豆子
公共缓存连接工厂订阅连接工厂(){
CachingConnectionFactory subcachingconnectionfactory=新的CachingConnectionFactory(rabbitMqConfig.getSubscriberHosts(),
rabbitMqConfig.getSubscriberPort());
subcachingconnectionfactory.setUsername(rabbitMqConfig.getSubscriberUsername());
subsCachingConnectionFactory.setPassword(rabbitMqConfig.getSubscriberPassword());
SubcachingConnectionFactory.setVirtualHost(“hydra.services”);
subsCachingConnectionFactory.setConnectionNameStrategy(f->“subscriberConnection”);
返回子缓存连接工厂;
}
@豆子
公共SimpleRableBitListenerContainerFactory队列ListenerContainer(
@限定符(“subscriberConnectionFactory”)CachingConnectionFactory subscriberConnectionFactory,
MessageListenerAdapter listenerAdapter){
connectionFactory.setAddresses(rabbitMqConfig.getSubscriberHosts());
connectionFactory.setVirtualHost(“hydra.services”);
setPort(rabbitMqConfig.getSubscriberPort());
connectionFactory.setUsername(rabbitMqConfig.getSubscriberUsername());
connectionFactory.setPassword(rabbitMqConfig.getSubscriberPassword());
SimpleRableBitListenerContainerFactory=新SimpleRableBitListenerContainerFactory();
setAcknowledgeMode(AcknowledgeMode.MANUAL);
factory.setConnectionFactory(subscriberConnectionFactory);
setErrorHandler(errorHandler());
返回工厂;
}
@豆子
MessageListenerAdapter listenerAdapter(EPPQ2订阅接收器){
返回新的MessageListenerAdapter(接收方,“receiveMessage”);
}
@豆子
公共错误处理程序