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

如何在不使用消息的情况下清除solace队列?

余铭晨
2023-03-14

我试图找到类似的问题,但找不到解决我问题的最佳方案。我在应用程序中使用SpringBoot,在代码中使用集成的solace队列。我可以使用以下代码读取solace队列中的消息:

@Configuration
public class JmsConfig {
    @Bean
    public ConnectionFactory connectionFactory() {
        return new PoolingConnectionFactoryBean();
    }
}

在SpringBoot的帮助下,所有属性(如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;
    }

根据消息的类型,定位服务执行器并处理消息。它对我们完全有效。

但是,在某些情况下,我们需要在不使用假脱机消息的情况下快速从队列中删除假脱机消息。在我在这里提到的当前设置中,我们有什么方法可以做到这一点。

我尝试通过队列浏览器,但没有这样的选项

共有1个答案

傅阿苏
2023-03-14

JMS本身没有定义一种方法来“在不消耗消息的情况下清除队列”。这种类型的操作留给特定于提供程序的管理员API。你最好的选择是使用JMS来消耗它们,只是不要处理它们。

我认为Solace SEMP Admin API定义了对象的删除,但没有快速清除。也许重新创建队列会起作用,但不会很漂亮。

 类似资料:
  • 问题内容: 我需要浏览消息队列而不删除它们。仅当它符合某些条件时,我才会继续删除消息队列项。这个怎么做?以下是我知道的API,但似乎没有一个支持窥视。 —关闭消息队列 —获取消息队列的当前属性 —当队列变为非空时通知呼叫进程 —打开或创建消息队列 —从队列接收消息 —将消息放入消息队列 —设置消息队列的标志 —取消链接(即删除)消息队列 有没有一种方法可以窥视一条消息而不删除它? 问题答案: 对于

  • 我有一个带有控制器、模型、服务和验证类的Spring mvc应用程序。一切正常。在开发我目前拥有的东西时,我将验证消息存储在一个messages.properties文件中——我在这样的配置类中注册了这个文件: 在Validator中,如果用户没有回答以下字段,我会添加一条验证消息: 在消息中。属性文件我有这个(上面的“age”是模型对象的名称,“required”是用于在messages.pro

  • 基本上,我已经得到了一个CircularQueue的实现,我需要实现一个名为'public boolean contains(E other)'的方法,如果参数'other'存在于我的队列中,该方法应该返回true。 我对它没意见,因为它是一个数组,但后来我看到了它的另一个条件,这困扰着我。 请记住,您不能在队列中的所有元素之间自由导航。只有front元素在任何时候都可以通过peek方法访问。co

  • 我可以在solace JMS队列中搜索任何特定的消息,然后在其他消息之前处理吗?我们有这样的功能w. r. t慰藉队列。

  • 我有一个生产者和一个消费者。消费者的多个实例正在运行。当生产者发布消息时,我的意图是通过所有实例消费该消息。所以,我使用的是直接交换。生产者将带有主题的消息发布到直接交换。消费者正在通过独占队列收听该主题。当消费者启动并且生产者发布消息时,此过程运行良好。但是当消费者关闭并且生产者发布消息时,消费者在启动时不会消费此消息。 我在谷歌上搜索了这个问题。建议使用命名队列。但是,如果使用命名队列,则消息

  • 我有一个代码,它在单击按钮时将包含输入字段和文本的div附加到父div。当我追加div并在字段中输入一些值,然后追加一个新的div时,输入字段的值不知何故变为空。它如何解决这个问题? 代码如下: