有没有办法更改发布者-确认每条消息?我们有一个接收消息并发布到RabbitMQ的Rest层。根据特定的消息属性,我们决定是否需要发布者确认。
有没有一种方法可以在发送消息时覆盖,发布者-确认?
不我们必须添加一堆脚手架来支持回报。此外,通道被缓存,一旦设置,就无法关闭通道的确认。我们必须保留两个不同的缓存。
如果希望使用条件确认,可以定义两个连接工厂(和模板),一个启用确认,一个不启用确认,并选择在运行时使用哪个模板。
编辑
@SpringBootApplication
public class So41131612Application {
public static void main(String[] args) throws Exception {
ConfigurableApplicationContext context = SpringApplication.run(So41131612Application.class, args);
context.getBean("normalTemplate", RabbitTemplate.class).convertAndSend("foo", "foo");
context.getBean("confirmingTemplate", RabbitTemplate.class).convertAndSend("", "foo", "foo",
new CorrelationData("foo"));
Thread.sleep(2000);
context.getBean(RabbitAdmin.class).deleteQueue("foo");
context.close();
}
@Bean
public Queue foo() {
return new Queue("foo");
}
@Bean
@Primary
public CachingConnectionFactory rabbitConnectionFactory() {
return new CachingConnectionFactory("localhost");
}
@Bean
public CachingConnectionFactory confirmingCf() {
CachingConnectionFactory cf = new CachingConnectionFactory("localhost");
cf.setPublisherConfirms(true);
return cf;
}
@Bean
public AmqpTemplate normalTemplate(@Qualifier("rabbitConnectionFactory") CachingConnectionFactory normalCf) {
return new RabbitTemplate(normalCf);
}
@Bean
public AmqpTemplate confirmingTemplate(@Qualifier("confirmingCf") CachingConnectionFactory confirmingCf) {
RabbitTemplate rabbitTemplate = new RabbitTemplate(confirmingCf);
rabbitTemplate.setMandatory(true);
rabbitTemplate.setConfirmCallback((cd, ack, cause) -> {
System.out.println("Correlation:" + cd + " ack: " + ack);
});
return rabbitTemplate;
}
}
POST /feeds Input Name Type Description feed_content string 分享内容。如果存在附件,则为可选,否则必须存在 feed_from integer 客户端标识,1-PC、2-Wap、3-iOS、4-android、5-其他 feed_mark mixed 客户端请求唯一标识 feed_latitude string 纬度,当经度, GeoH
我有一个学校作业,要做一个程序,结果要么正确,要么错误。这关系到一年是否是闰年。目前的问题是,我使用的是公共静态布尔值,而不是公共布尔值。这是我的代码: 现在int年是2000年,但是规则是这样的:闰年是一年,可以除以4,除非这一年是一个新世纪的开始(1700, 1800, 1900.....)。所以即使你可以把1900除以4,你也不能把它除以400,所以这是错误的。所以再一次问一个问题:我需要做
问题内容: 我正在从数据库中成功获取数据值。我也将它们存储到一个数组中。我需要将String数组作为项的加载,以响应执行的关键操作。每当获取按键值时,如何获取按键值,就如何重新加载项目。相反,我需要动态刷新项目。 问题答案:
问题内容: 我正在以编程方式/动态方式创建原型bean。我希望启动后的这些bean在jmx控制台中。我如何区分它们?我正在使用注释以便将我的bean添加到jmx中, 我需要动态注入objectName。知道我该怎么办吗? 这是我的jmx配置: 问题答案: 您可以使用JMX命名策略来执行此操作。在工作中,我们使用一个接口: 我已经发布了实现RuntimeMetadataNamingStrategy命
使用方法:进入动态-发布动态-发布
我错过了什么? 为了便于阅读,这里提供了一个要点,并附带了一个测试用例:https://Gist.github.com/teyc/5668517