我有一个java客户机,它在队列中发送jms消息(“队列请求”)。该消息包含一个int属性(“id”),其中包含唯一的客户端id号。消息正在处理中,然后进入另一个队列(“队列响应”)。如何让客户机等到具有其id的消息在队列中,然后读取它。我曾尝试使用侦听器并实现onMessage,但当收到消息时,我如何停止侦听?
在JMS中,您需要为队列指定侦听器,以便在发送消息时,选择特定的侦听器来接收消息。在Spring中,您可以在bean配置文件中指定侦听器,例如:
<bean id="myListener" class="mypackage.MyMessageListener" />
<bean id="queueBean" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg value="Queue-Request"/>
</bean>
<bean id="myListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactoryBean" />
<property name="destination" ref="queueBean" />
<property name="messageListener" ref="myListener" />
</bean>
然后您可以编写类MyMessageListener
来实现MessageListener
接口:
public class MyMessageListener implements MessageListener {
public void onMessage(Message message) {
//handle message here ...
}
}
这将确保MyMessageListener
将从队列中获取发送的消息。请注意,队列是p2p的,因此如果消息是由MyMessageListener
接收的,则不订阅此队列的其他侦听器将不会接收该消息。
可以使用JMSReplyTo来实现JMS同步。在发送相同会话的原始消息时创建临时队列。开始监听临时队列,并将原始消息JMSReplyTo设置为TmpQueue。
使用临时队列接收器。receive()使线程等待(同步)
完整的示例代码可以在中找到
http://jmsexample.zcage.com/
有一个SQS队列,我在其中不断收到消息。我只需要阅读和处理过去24小时内收到的信息。目前收到的信息应在第二天处理<代码>时间戳存储在消息正文中。 是否可以从SQS队列中选择性地读取消息。例如,只读那些值大于前一天的时间戳但小于当前时间戳(当前时间戳是此作业运行的时间)的消息?
我在Weblogic 12c上部署了一个MDB,它从JMS队列(UDQ)读取消息。MDB正在读取消息,但它没有从JMS队列中删除,这导致消息被重复读取。所以,我想知道MDB何时确认JMS队列它成功读取了消息,并且队列应该删除该消息。
我有以下设置: 外部应用程序写入到jms队列 jms队列也是外部的,所以这里不可能进行配置 运行在Glassfish上的现有应用程序,使用ActiveMQ将服务器连接到jms队列 现有的应用程序是一个MessageDriven bean,实现了MessageListener接口(当消息放在队列中时,当前正在处理消息) 新的要求是消息只能在02:00到04:00的时间段内处理 如何最好地限制Mess
我有Weblogic 12.1.2和IBM WebSphere MQ Explorer 7.5.0.2。 在Weblogic中,我创建了: JMS服务器 我有一个JAVA程序,可以向这个队列发送消息。 我想使用MQ Explorer来读取来自此队列的消息。我如何设置它?我应该在MQ Explorer中做什么和如何设置,以连接到此队列?有人能给我一个Web链接吗?我找不到任何有用的东西,但也许我想错
正如问题的标题所述,如何使用JMS从WebSphere SI总线异常队列中读取有害消息? 提前致谢。
问题内容: 我只是对JMS和Apache ActiveMQ有所了解。并且想知道这里的人们将JMS或类似的消息队列技术用于什么吗? 问题答案: JMS(ActiveMQ是JMS代理实现)可以用作允许异步请求处理的机制。您可能希望执行此操作,因为请求需要很长时间才能完成,或者因为实际的请求可能涉及多个方面。使用它的另一个原因是允许多个客户端(可能以不同的语言编写)通过JMS访问信息。ActiveMQ是