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

使用Spring启动和停止JMS监听器

毋宏茂
2023-03-14

所以问题是如何临时停止和启动使用spring创建的jms侦听器,使用衰减方式:

<amq:connectionFactory id="exampleJmsFactory" brokerURL="tcp://${jms.broker.url}" />

<jms:listener-container concurrency="1" connection-factory="exampleJmsFactory"  destination-type="queue" message-converter="exampleMessageConverter">
        <jms:listener destination="incoming.example.client.queue" ref="exampleProductsMessageConsumer" method="consume"/>
</jms:listener-container>


<bean id="exampleProductsMessageConsumer" class="com.unic.example.jms.receive.JmsExampleProductsMessageConsumer" scope="tenant"/>

那么基本上问题是什么。我们确实有一个初始化/更新机制,客户端可以在任何时间运行,在初始化/更新期间,我想停止使用任何消息,因为系统在这段时间内不可用,如果消息来了,它将丢失。

因此,我如何使用API停止侦听器或侦听器容器或整个连接。我发现一个类AbstractJmsListeningContainer有stop/start,但我怎么能得到它呢?我的意思是这些jms都没有:侦听器和侦听器容器都有名称或类似的名称。

共有3个答案

池俊茂
2023-03-14

您还可以获取消息ListenerContainer,并在其上调用Stop():

@javax.annotation.Resource //autowire by name
 private AbstractJmsListeningContainer myMessageListenerContainer;

 myMessageListenerContainer.stop();

 I'm using the more verbose setup of this container:
 <bean id="myMessageListenerContainer" class="org.springframework.jms.listener.DefaultMes sageListenerContainer">
 <property name="connectionFactory" ref="jmsConnectionFactory"/>
 <property name="destination" ref="myQueue"/>
 <property name="messageListener" ref="myListener"/>
 <property name="autoStartup" value="true" />
 </bean>

在这里,您可以看到,如果您不希望listenerContainer自动启动,您可以将autoStartup设置为false。

薛利
2023-03-14

是的,这就是诀窍。

<jms:listener-container concurrency="1" connection-factory="exampleJmsFactory"  destination-type="queue" message-converter="exampleMessageConverter">
        <jms:listener id="exampleProductsMessageListener" destination="incoming.example.client.queue" ref="exampleProductsMessageConsumer" method="consume"/>
</jms:listener-container>



DefaultMessageListenerContainer exampleProductsMessageListener= Registry.getApplicationContext().getBean("exampleProductsMessageListener", DefaultMessageListenerContainer.class);
exampleProductsMessageListener.stop();
薛弘厚
2023-03-14

您可以为侦听器容器分配一个id。然后通过调用getBean或注入它来获取对它的引用。这将为您提供一个AbstractJmsListeningContainer,您可以在其上调用start/Stop。

 类似资料:
  • 我正在使用Spring靴和活动MQ设置一个持久的JMS主题使用者。我能够使用Spring靴@JmsListener注释来使一切正常工作(作为耐用消费者成功运行)。但是,因为我想动态创建侦听器,所以我尝试使用 JmsListener 配置接口来创建它们。 使用主题“消费者”下面的代码可以成功地创建和使用消息。但是,问题是它创造的消费者并不持久。我在工厂中将clientId、setSubscripti

  • 我正在用C语言编写一个服务器,使用POSIX sockets api。 这是作为GUI应用程序的一部分运行的,它需要能够停止和启动服务器监听和向客户端发送数据。 服务器的主要部分基本上是这样的(我排除了很多代码,因为其中一些与这个问题无关。) 换句话说: 让套接字监听连接 为select()调用设置fds 使用stdin调用select(),所有连接客户端套接字,以及获取从GUI发送的任何数据的管

  • ap.onBackgroundAudioStop(CALLBACK) 监听音乐停止事件。 代码示例 <script src="https://gw.alipayobjects.com/as/g/h5-lib/alipayjsapi/3.1.1/alipayjsapi.inc.min.js"></script> <style>.output{ display:block; max-width: 1

  • 问题内容: 我需要一些有关在PHP中启动和停止计时器的信息。我需要测量从我的.exe程序开始(我在PHP脚本中使用函数)到完成执行并显示所花费的时间(以秒为单位)之后经过的时间。 我怎样才能做到这一点? 问题答案: 您可以使用并计算差异: 这是PHP的文档:http : //php.net/manual/zh/function.microtime.php

  • 我无法停止。它的样式是。如何启动和停止圆形的小型?

  • 参考 workerman手册 http://doc3.workerman.net/install/start-and-stop.html