Spring boot 错误-兔子模板发布确认-回复代码=403,回复文本=访问被拒绝-无法发布到内部exchange
我的用例是:Spring boot 错误-兔子模板发布确认-回复代码=403,回复文本=访问被拒绝-无法发布到内部exchange,spring-boot,spring-amqp,Spring Boot,Spring Amqp,我的用例是: 订阅Q1并按指定大小批量读取邮件 传递已读邮件集合以进行处理 成功确认Q2发布后,将收集到的消息发布到Q2,并将确认消息发布到Q1 代码 @组件 公共类EPPQ2订户{ 私有静态最终记录器Logger=LoggerFactory.getLogger(EPPQ2Subscriber.class); @自动连线 RabbitMqConfig RabbitMqConfig; @自动连线 AppConfig-AppConfig; List messageList=new ArrayList
@组件
公共类EPPQ2订户{
私有静态最终记录器Logger=LoggerFactory.getLogger(EPPQ2Subscriber.class);
@自动连线
RabbitMqConfig RabbitMqConfig;
@自动连线
AppConfig-AppConfig;
List messageList=new ArrayList();
List diliveryTag=new ArrayList();
/**
*方法是侦听器的接收消息方法,在有消息准备好读取时调用
*@param message-已封装消息的域对象
*@param通道-rabitmq客户端通道
*@param messageId-@TODO稍后删除它。
*@param messageProperties-amqp message properties包含传递标签等消息属性。。
*/
@RabbitListener(id=“messageListener”,queues=“#{rabbitMqConfig.getSubscriberQueueName()}”,containerFactory=“queueListenerContainer”)
public void receiveMessage(消息消息,通道通道,@Header(“id”)字符串messageId,
MessageProperties(消息属性){
LOGGER.info(“结果:+message.getClass()+”:“+message.toString());
if(messageList.size()
if(相关性!=null){
LOGGER.info(“收到”+(确认?:“确认”)+
“相关性:”+相关性);
如果(确认){
//这是收到的确认书。。
//下面是ack Q1.correlation.getId和ack的代码
eppQ2Publisher.ackMessage(新)
Long(correlation.getId().toString());
}否则{
//未收到确认,无需执行任何操作
需要重试的东西。。
}
}
});
rabbitTemplate.setReturnCallback((消息,replyCode,
replyText、exchange、routingKey)->
{
LOGGER.error(“返回:“+message+”\nreplyCode:”+
replyCode+“\nreplyText:+replyText+
“\nexchange/rk:”+exchange+“/”+routingKey);
});
返回兔模板;
}
/**
*Bean Jackson2JsonMessageConverter
*@return Jackson2JsonMessageConverter
*/
@豆子
公共Jackson2JsonMessageConverter生产商Ackson2MessageConverter(){
返回新的Jackson2JsonMessageConverter();
}
}
公共接口EPPQ2Publisher{
公共无效发送消息(消息消息消息,长deliveryTag);
公共无效发送消息(列表msgList、通道通道、列表deliveryTagList);
公共消息(长deliveryTag);
}
@组成部分
公共类EPPQ2PublisherImpl实现EPPQ2Publisher{
@自动连线
RabbitMqConfig RabbitMqConfig;
@自动连线
私人兔样板兔样板;
专用信道;
/**
*方法sendMessage,用于将单个已清除和加密的消息发送到发布者队列(Q2)。
*@param msg-消息域对象
*@param deliveryTag-是消息传递标记。
*/
@凌驾
公共无效发送消息(消息消息消息,长deliveryTag){
rabbitTemplate.convertAndSend(rabbitMqConfig.getPublisherTopic(),rabbitMqConfig.getRoutingKey(),msg,新的CorrelationData(deliveryTag.toString());
}
/**
*sendMessages用于将已清除和加密的消息列表发送到发布服务器队列(Q2)
*@param msgList-已清除和加密邮件的列表
*@param通道-是ampq客户端通道
*@param deliveryTagList-是传入邮件传递标记的列表。
*/
@凌驾
公共无效发送消息(列表msgList、频道通道、列表DeliveryTagList){
if(this.channel==null){
this.channel=channel;
}
对于(int i=0;i
org.springframework.amqp.rabbit.connection.CachingConnectionFactory从AMQChannel创建缓存兔子频道(amqp://dftp\u订户@10.15.190.18:5672/hydra.services,2)
我希望成为dftp_的发布者,我想我的主题配置没有正确注入
错误日志:
org.springframework.amqp.rabbit.core.rabbitmplate[0;39m:在RabbitMQ通道:缓存的兔子通道:AMQChannel上执行回调rabbitmplate$$Lambda$285/33478758(amqp://dftp_subscriber@10.15.190.18:5672/hydra.services,2),康涅狄格州:Proxy@1dc339f共享兔子连接:SimpleConnection@2bd7c8 [代表=amqp://dftp_subscriber@10.15.190.18:5672/hydra.services,localPort=55553]
org.springframework.amqp.rabbit.core.rabbitmplate[0;39m:发布消息(正文:“{”标题:“{”重试计数“:”0,“发布事件类型“:”AUTH“,”有效载荷“:{”MTI“:”100”,“MTI请求“:”100”,“PAN“:”6011000000000000”,“PROCCODE:”请求“:”00”,“发件人帐户“:”00”,“收件人帐户“:”00”,“交易金额“:”000000000 100”,“传输MMDDHMMSS:”“0518202930”、“STAN”:“000001”、“本地时间”HHMMS:“010054”、“本地日期”YYMMDD:“180522”、“到期日期”YYMM:“2302”、“商户类型”:“5311”、“收单国家代码”:“840”、“POS输入模式”:“02”、“POS输入”