我试图测试spring rabbitmq confirm callback的行为,根据api描述,如果通过consumer发送了任何否定确认,则confirm callback应该给出ack的false值,但在我的例子中总是给出true。即使我将消息发布到deleted队列,我也在confirm回调中获得了true值。请告诉我如何得到否定的承认。
下面是我如何创建RabbitTemplate bean的代码。
@Bean
public RabbitTemplate rabbitTemplate( ConnectionFactory connectionFactory ) {
RabbitTemplate rabbitTemplate = new RabbitTemplate( connectionFactory );
((CachingConnectionFactory)rabbitTemplate.getConnectionFactory()).setPublisherConfirms( true );
rabbitTemplate.setConfirmCallback( new ConfirmCallback() {
@Override
public void confirm( CorrelationData corData, boolean ack, String cause ) {
System.out.println( "devconfig.rabbitTemplate(...).new ConfirmCallback() {...}.confirm()"+corData );
System.out.println( "devconfig.rabbitTemplate(...).new ConfirmCallback() {...}.confirm()"+ack );
}
} );
return rabbitTemplate;
}
这不是ack的工作方式-ack意味着它被交付给一个交易所-很少会得到nack-根据RabbitMQ文档,只有在代理本身存在问题时,您才会得到nack
。
否定承认
在特殊情况下,当代理无法成功处理消息时,代理将发送basic.ack
而不是basic.nack
。在此上下文中,basic.nack
的字段与basic.ack
中的相应字段具有相同的含义,并且应该忽略requeue字段。通过拒绝一个或多个消息,代理表明它无法处理这些消息,并拒绝对这些消息负责;此时,客户端可以选择重新发布消息。
basic.nack
只有在负责队列的Erlang进程中发生内部错误时才会传递。
此外,如果连接在接收到ack之前关闭,那么Spring AMQP会生成Nack(同样--非常罕见)。
如果您希望得到消息无法传递到队列的通知,则必须启用publisher returns并将mandition
设置为true,消息将返回给您。
问题内容: 我有两个使用的示例。首先是对回调函数的引用。第二个有一个箭头函数声明为该值。 第一个按预期工作。但是,第二个在连续渲染中记录a 。 这是什么原因呢? 开始在输入框中输入内容 示例1(工作正常) 示例2(这不起作用) 问题答案: 关于React的Github问题已经对此进行了简要讨论。我会尽力解释这一点,但是很难用语言表达。 由于在第二个示例中您没有调用“智能”组件方法,因此每次重新渲染
我使用的是aspnet core托管的blazor wasm项目类型。我正试图通过发送给用户的电子邮件链接确认用户帐户。 正在生成并发送电子邮件。生成的确认链接为:https://localhost:5001/accountconfirmation?code=CfDJ8L2gJclnoq5BioPxBNdLc8wCyaMHcitemYm7I8XKkeyM vauvFOj0HN1meMs6JusAI
我正在学习AOP Spring并尝试一些示例。关于@AfterBack ning,我所理解的是,只有当目标成功返回并且与切入点匹配时,才会调用该方法。然而,在我的例子中,如下所示,我有一个切入点,它定义了所有只返回字符串的方法,但它调用了所有空方法以及返回字符串的方法。 我的建议: 请在下面找到我的Impl课程: 请在下面找到我的MainApp类: 我原本希望只调用getCustomer(),因为
我正在使用spring Roo并希望访问Controller类中的一个bean,该类在ApplicationContext.xml中具有以下配置: 配置类本身是: 在我的Controller中,我认为一个简单的Autowired注释应该可以完成这项工作 在启动过程中,spring在setSkipWeeks方法中打印消息。不幸的是,每当我在控制器中调用config.getSkipWeeks()时,它
当我运行以下程序时,它只打印 然而,从Java 8的equalsIgnoreCase文档中我们发现: 如果以下至少一项为真,则两个字符c1和c2被视为相同的忽略情况: •对每个字符应用java.lang.character.ToUpperCase(char)方法会产生相同的结果 所以我的问题是为什么这个程序不打印 在这两种操作中,都使用了大写字符。
我试图使用来传输我根据前面的问题设置的自定义标头。 我在文件中读到... 我的属性包括: