当前位置: 首页 > 知识库问答 >
问题:

Spring AMQP发布商在amqp出站网关中确认

益明朗
2023-03-14

我正在使用spring amqp使用出站网关将消息发布到RabbitMQ。我在连接工厂上设置了publisher confirms,并添加了自定义回调侦听器。

问题是我的相关数据总是空,我不能在出站网关上添加任何相关数据。这仅适用于出站通道适配器。

对于出站网关,出版商是否会确认工作?

编辑我的配置如下。我查看了SI代码,是的,publisher确认已启用。问题是当我收到NACK时我会做什么?由于出站网关,我不需要相关id来处理响应,已经有一个线程在临时响应队列上侦听响应。

在出站网关中使用发布者确认到底有什么意义?如果没有响应,或者我的Rabbit节点下降,我会遇到异常。有没有可能我会丢失消息?

<rabbit:connection-factory id="rabbitConnectionFactory"
                               host="someip" port="5672"
                               username="username"
                               password="password"
                               virtual-host="vhost"
                               publisher-confirms="true"/>

    <rabbit:admin connection-factory="rabbitConnectionFactory"/>

    <rabbit:template id="amqpTemplate" connection-factory="rabbitConnectionFactory"
                     confirm-callback="messagesConfirmCallback"/>
 <int-amqp:outbound-gateway
            request-channel="channel"
            amqp-template="amqpTemplate"
            exchange-name="exchange"
            routing-key-expression="headers['queueSpecific']+'.queue'">
        <amqp:request-handler-advice-chain>
            <ref bean="retryAdvice"/>
        </amqp:request-handler-advice-chain>
    </int-amqp:outbound-gateway>

我的回调也很简单

@Component
public class MessagesConfirmCallback implements RabbitTemplate.ConfirmCallback {

    private final static Logger LOGGER = LoggerFactory.getLogger(MessagesConfirmCallback.class);

    @Override
    public void confirm(CorrelationData correlationData, boolean ack) {
        if(ack){
            LOGGER.info("ACK received");
        }
        else{
            LOGGER.info("NACK received");
        }
    }
}

共有1个答案

慕容玉堂
2023-03-14

不幸的是,我没有看到一个简单的工作与网关;底层的rabbitmplate只支持在send()方法上添加相关数据,而不支持send和receive方法。

我能想到的两个选项是:(1)使用一对出站和入站适配器(而不是网关),但在这种情况下,您必须自己进行请求/应答关联。

或者(2),使用RabbitTemplate。execute()并在doInRabbit回调中,添加与rabbitmplate中类似的代码。dosendReceive,同时按照doSend()中的操作设置相关数据。

我打开了一个JIRA问题。

 类似资料:
  • 问题陈述: Spring amqp outbound gateway从不同的线程生成应答(如jms outbound gateway,具有不同的队列,使用相关键关联请求/响应)。 无法将消息与此示例关联。 Spring集成 配置 服务 错误: 组织。springframework。整合。处理程序。ReplyRequiredException:处理程序“outboundGtwyId”未生成回复,其“

  • 发布网站 你现在应该有一个在本地运行的网站。 一旦你将它定制为你喜欢样子,就是时候发布它了。 Docusaurus 生成一个静态 HTML 网站,准备好由您最喜爱的网络服务器或在线托管解决方案来提供服务。 构建静态 HTML 页面 要创建您的网站的静态版本,请在 website 的目录中运行以下脚本: yarn run build # 或 `npm run build` 这将在 website

  • 我一直在尝试SpringAMQP。我有几个问题: 我想知道什么是Publisher退货,它与Publisher确认有什么不同。据我所知,我们有一个Publisher Confirm回调,用于检查ACK的状态。现在我看了Spring AMQP和Rabbit MQ中的文档。在这件事上我真的没有发现或理解太多。 还有为什么如果消息试图发送到一个不存在的队列,我不会得到任何类型的确认(ack/nack),

  • 有没有办法更改发布者-确认每条消息?我们有一个接收消息并发布到RabbitMQ的Rest层。根据特定的消息属性,我们决定是否需要发布者确认。 有没有一种方法可以在发送消息时覆盖,发布者-确认?

  • 我计划在我的项目中使用Spring Cloud Stream。是否可以使用Publisher Confirms(又名Publisher Acknowledges),即注册确认回调,如中所述http://docs.spring.io/spring-amqp/reference/html/_reference.html#cf-发布配置ret?或者是否有其他可能从RabbitMQ接收ack,表明它已从客

  • 主要内容:Text Sublime,Notepad++,EditPad,XAMPP&LAMPP作为一个初学者,需要了解一个网站开发者开发网站必需的一些工具,了解这些工具的主要用途。 首先,应该有一个基本的互联网包,具有良好的上传速度,最低1Mbps。 其次,应该有一台电脑与任何操作系统(可以是Linux,iOS X或Windows)。 那么硬件规格应该是最小的 - 1-2 GB的RAM,处理器至少应该是一个双核心和硬盘必须在80 GB左右。 下一步是 - 应该有一个文本编辑器,可以编写代码