我试着找到类似的问题,但找不到我的问题的最佳解决方案。我在应用程序中使用了spring boot,在代码中使用了集成的solace队列。我可以使用以下代码从solace队列中读取消息:
@Configuration
public class JmsConfig {
@Bean
public ConnectionFactory connectionFactory() {
return new PoolingConnectionFactoryBean();
}
}
在spring boot的帮助下,可以从属性文件中提取VPN等所有属性,并创建ConnectionFactory。下面是读取消息的代码:
@Configuration
public class QueueConfig {
@Value("${destination.name}")
private String destination;
@Value("${destination.isPubSub:false}")
private boolean pubSubDomain;
@Value("${maxConsumers:1}")
private int maxConsumers;
@Value("${destination.autoStartup:true}")
private boolean autoStartup;
@Bean
public IntegrationFlow queueFlow(ConnectionFactory jmsConnectionFactory, PlatformTransactionManager transactionManager) {
return IntegrationFlows
.from(Jms.messageDrivenChannelAdapter(jmsConnectionFactory).autoStartup(autoStartup)
.configureListenerContainer(
c -> c.transactionManager(transactionManager).pubSubDomain(pubSubDomain).maxConcurrentConsumers(maxConsumers))
.destination(destination))
.transform(Transformers.fromJson(HashMap[].class)).log(LoggingHandler.Level.INFO, m -> MessageFormat
.format("Processing {0} {1} records...", ((Object[]) m.getPayload()).length, m.getHeaders().get("table")))
.route(getTableRouter()).get();
}
private ExpressionEvaluatingRouter getTableRouter() {
ExpressionEvaluatingRouter router = new ExpressionEvaluatingRouter("headers['table']");
router.setResolutionRequired(false);
router.setDefaultOutputChannel(new NullChannel());
return router;
}
根据消息的类型,定位服务执行器并处理该消息。它对我们来说工作得很好。
但是,在某些情况下,我们需要从队列中快速删除假脱机消息,而不使用它们。在我这里提到的当前设置中,有什么方法可以做到这一点吗?
我尝试通过队列浏览器,但那里没有这样的选项
转载请注明出处:http://www.kldfzc.com/article/20230526/2009977.html