Tag: jms

使用Spring的CachingConnectionFactory时关闭会话

这里与Spring CachingConnectionFactory相关的java doc有评论: 注意:此ConnectionFactory要求显式关闭从其共享Connection获取的所有Sessions。 无论如何,这是本机JMS访问代码的通常建议。 但是,使用此ConnectionFactory,必须使用它才能实际允许会话重用。 我不清楚如何使用我的应用程序中的以下给定配置来处理这个问题。 com.tibco.tibjms.naming.TibjmsInitialContextFactory tibjmsnaming://localhost:7222 admin admin 监听器类是这样的: public class MessageListenerApp implements MessageListener { private static int c = 0; @Override public void onMessage(Message arg0) { try { System.out.println(“Received Message…”+arg0.getStringProperty(“MessageNum”)+”. Waiting to finish..”); Thread.sleep(2000); System.out.println(“Finished processing..”+arg0.getStringProperty(“MessageNum”)+”..”+(c++)); } catch (Exception e) { e.printStackTrace(); } } } 如何遵循应明确关闭从共享连接获取的会话的建议? 遇到SessionAwareMessageListener接口,该接口提供onMessage方法,该方法提供Session的句柄。 那么要正确实现会话结束,是否应实现此接口?

如何找到horneq队列长度

我正在使用Hornetq 2.0我不明白我怎么知道目前有多少消息在队列中。 这是一个非常有用的function,所以我可以在运行时知道我的消费者是否足够快地消费消息。 我没有使用JMS api,而是使用高度优化的核心API。 获取队列中消息数的正确(最快)方法是什么? 我找到了2路,但不知道这是什么方法。 public int size(){ ClientSession session; try { session = sf.createSession(false, false, false); ClientRequestor requestor = new ClientRequestor(session, “hornetq.management”); ClientMessage m = session.createMessage(false); ManagementHelper.putAttribute(m, “core.queue.” + queueName, “messageCount”); ClientMessage reply = requestor.request(m); int count = (Integer) ManagementHelper.getResult(reply); return count; } catch (Exception e) { e.printStackTrace(); } return 0; } […]

Oracle:发送JMS消息的Java存储过程

我试图从oracle数据库存储过程发送点对点JMS消息到java应用程序。 这两个“点”位于不同的机器上,我已经确认可以通过ping相互通信。 我创建了一个java应用程序,能够成功地将消息从应用程序服务器中的队列中取出。 该应用程序在JBoss v4.2.3服务器中运行。 我已经能够从远程Java应用程序成功发送JMS消息,所以我确信在服务器中运行的代码是可以的。 我从工作的远程java应用程序中获取代码并将其成功加载到oracle存储过程中。 我还设法(我相信!)使用loadjava实用程序将所需的jar文件加载到oracle中。 我加载的三个jar文件是: * jms-1.1 * jbossmq-3.2.3 * jboss-client-4.0.2 这三个jar在工作的远程java应用程序中使用,看起来就是所有需要的。 包含在存储过程中的代码如下: package com.base.jms.client; import java.util.Hashtable; import javax.jms.JMSException; import javax.jms.Queue; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; import javax.jms.QueueSender; import javax.jms.QueueSession; import javax.jms.TextMessage; import javax.naming.Context; import javax.naming.InitialContext; public class StandAloneClient { public static String send() throws Exception { String result = “Starting -> […]

Java HTTP推送(消息传递)的最佳解决方案

我们希望将数据从服务器推送到客户端,但只能使用HTTP(端口80)。 消息传递的最佳解决方案是什么? 一个想法是Comet 。 是否有其他想法或框架可以提供JMS over HTTP。 (是的,ActiveMQ也支持它,但是哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇。

避免在JMS / ActiveMQ上重复的消息

有一种方法可以抑制ActiveMQ服务器上定义的队列上的重复消息吗? 我尝试手动定义JMSMessageID(message.setJMSMessageID(“uniqueid”)),但服务器忽略此修改并传递带有内置生成的JMSMessageID的消息。 根据规范,我没有找到关于如何重复删除邮件的参考。 在HornetQ中,为了解决这个问题,我们需要在消息定义中声明HQ特定属性org.hornetq.core.message.impl.HDR_DUPLICATE_DETECTION_ID。 即: Message jmsMessage = session.createMessage(); String myUniqueID = “This is my unique id”; // Could use a UUID for this message.setStringProperty(HDR_DUPLICATE_DETECTION_ID.toString(), myUniqueID); 有人知道ActiveMQ是否有类似的解决方案?

如何连接消息驱动的适配器列表而不实际写出每个适配器?

嘿所以我需要像十几个队列一样收听,或多或少地通过相同的处理流程将所有传入的消息放入其中。 我有消息驱动的通道适配器连接到每个队列: ……等等。 收到消息后,我将它们全部路由到同一个频道。 但是我仍然需要知道消息来自哪里,所以在我实际路由它们之前,我有点使用标头扩充器来为消息添加队列名称。 有没有办法让我喜欢迭代队列名称列表并动态创建这些适配器? 也许使用java配置? 提前致谢。

JMS AUTO_ACKNOWLEDGE何时被确认?

我试图谷歌这个,但没有成功。 如果我正在使用AUTO_ACKNOWLEDGE ,并且我有一个用Java编写的消费者客户端,那么消息何时被确认? 我正在使用一个包含onMessage方法的MessageListener 。 是否在onMessage之前或onMessage完成之后或在某个其他时刻将确认发送回服务器? 提前感谢任何人都能提供的帮助!

哪个更好:PooledConnectionFactory或CachingConnectionFactory?

我们在Tomcat(7.0.41)中使用Spring(3.2.4)和ActiveMQ(5.8.0)并且不清楚最佳用法是什么。 我们希望使用JmsTemplate生成MessageListenerContainer来接收消息。 我们应该在接收方使用缓存吗? ( 相关链接 ) 使用ActiveMQ和故障转移工作CachingConnectionFactory? ( 相关链接 ) 当我们使用PooledConnectionFactory时需要设置useAsyncSend =“true”? ( 相关链接 )

JMS vs Webservices

JMS优于Webservices有什么大的优势,反之亦然? (Web服务是否膨胀?JMS总体上更好地提供接口吗?)

multithreadingJMS客户端ActiveMQ

我使用以下代码为多个消费者创建多个JMS会话以使用消息。 我的问题是代码以单线程方式运行。 即使消息存在于队列中,第二个线程也无法接收任何内容并且只是保持轮询。 第一个线程同时完成第一批处理并返回并消耗剩余的消息。 这里的使用有什么问题吗? static { try { ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(“tcp://172.16.143.99:61616”); connection = connectionFactory.createConnection(); connection.start(); } catch (JMSException e) { LOGGER.error(“Unable to initialise JMS Queue.”, e); } } public JMSClientReader(boolean isQueue, String name) throws QueueException { init(isQueue,name); } @Override public void init(boolean isQueue, String name) throws QueueException { // Create a Connection […]