Tag: jms

使用JMS发送消息在退出时挂起

我正在尝试创建一个Java应用程序客户端项目,该项目将一条JMS消息发送到Glassfish服务器上的队列。 问题是,在应用程序发送消息后,它会在应该退出时挂起。 消息传输成功,但由于某种原因,应用程序不会退出。 我试图调试应用程序,我可以一直走到static void main的末尾,这就是它挂起的地方。 这是代码: import javax.jms.*; import javax.naming.InitialContext; public class Main { public void SendMessage() throws Exception { InitialContext ctx = new InitialContext(); ConnectionFactory cf = (ConnectionFactory) ctx.lookup(“jms/TestFactory”); Queue queue = (Queue)ctx.lookup(“jms/TestQueue”); Connection conn = cf.createConnection(); Session s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer prod = s.createProducer(queue); TextMessage txt = s.createTextMessage(“testing”); prod.send(txt); prod.close(); s.close(); […]

如何限制JMS DefaultMessageListenerContainer重试消息的次数?

我使用Spring JMS连接到Websphere MQ服务器。 我实现了SessionAwareListener接口来创建自定义侦听器,重用业务逻辑的旧代码。 在测试时,监听器抛出一个我无法捕获的StringIndexOutOfBoundsException。 但是,我在日志中看到以下打印了大约32次,然后DMLC停止了。 WARN – Execution of JMS message listener failed 有没有办法控制DMLC重试消息的频率,以及如何处理未捕获的exception?

如何在Spring Java Config的单个MessageListenerContainer中添加多个JMS MessageListners

我在spring-config.xml中有以下xml代码 现在,我正在将spring xml配置文件转换为Java配置。 我把它翻译成了 @Bean(name = “consumerJmsListenerContainer”) public DefaultMessageListenerContainer consumerJmsListenerContainer() { DefaultMessageListenerContainer messageListenerContainer = new DefaultMessageListenerContainer(); messageListenerContainer .setConnectionFactory(cachingConnectionFactory()); messageListenerContainer.setConcurrency(“20-25”); messageListenerContainer.setErrorHandler(new ConsumerErrorHandler()); messageListenerContainer .setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE); messageListenerContainer.setMessageListener(new TaskFinished()); return messageListenerContainer; } 我需要知道的是,如果消息容器中有多个MessageListner,如 我怎么能把这个xml代码转换成Java配置?

将自定义对象绑定到JMS MapMessage

有没有一种标准的方法让我将自己的自定义对象添加到Map中,然后在MapMessage中正确编组? 目前我收到无效对象类型消息。 我注意到WebSphere有一个解决方案,但我正在寻找一些没有绑定到特定AS的东西,如果没有这样的方法,JBoss支持的东西可能会起作用。 如何在WebSphere中执行此操作: http : //publib.boulder.ibm.com/infocenter/dmndhelp/v6rxmx/index.jsp?topic = / com.ibm.websphere.wesb.doc / ref / rwesb_jmscustombindings.html

ActiveMQ:’通道长时间处于非活动状态’exception会停止代理消息传递

我的系统有以下几个部分: ActiveMQ代理暴露在tcp,端口61616上 3 Grails / Spring战争存在于他们自己的Tomcat服务器中,他们向JMS代理发布和使用消息 n次使用JMS侦听器组件的远程客户端系统接收客户端特定的消息,使用主机名和端口61616通过VPN连接到JMS代理 到目前为止,所有在开发,测试和生产环境中都能正常工作。 我们刚刚在生产中连接了一个新的客户端系统,我们注意到它的日志开始报告“通道长时间处于非活动状态”exception并丢弃了连接。 担心这个客户端的整体效果是它会停止代理上的所有消息消耗,从而导致整个系统停止运行。 此客户端侦听器(使用Spring缓存连接工厂)似乎连接到JMS代理确定,处理一些消息,然后3分钟报告exception。 在ActiveMQ中启用了DEBUG并获得了大量输出,但是在同一时间没有任何迹象表明代理上有警告或错误。 相信ActiveMQ有一些内部保持活动,即使在非活动时间超过默认的30秒也应保持连接。 基础设施人员监控了该客户端的VPN,并确认它始终保持连接状态。 不要相信它是错误的代码或Spring配置,因为我们在不同的客户端中有许多其他的监听器实例,并且它们都表现得很好。 假设我真的有两个问题: 是什么导致“频道不活跃”例外? 为什么单个客户端中的此exception会阻止ActiveMQ工作? 编辑 – 添加exception堆栈跟踪: 2013-04-24 14:02:06,359 WARN – Encountered a JMSException – resetting the underlying JMS Connection (org.springframework.jms.connection.CachingConnectionFactory) javax.jms.JMSException: Channel was inactive for too (>30000) long: jmsserver/xxx.xx.xx.xxx:61616 at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49) at org.apache.activemq.ActiveMQConnection.onAsyncException(ActiveMQConnection.java:1833) at org.apache.activemq.ActiveMQConnection.onException(ActiveMQConnection.java:1850) at org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:101) at org.apache.activemq.transport.ResponseCorrelator.onException(ResponseCorrelator.java:126) at […]

DOM解析器错误的childNodes计数

这很奇怪,但让我尽力把它放在一边。 我有一个XML,我正在通过桌面的正常方式阅读并通过DOM解析器解析它。 0 abc App abc Wallet 11 Ss22 Adding New cake 读取XML以获取孩子。 Document doc = docBuilder.parse(“C://Users//Desktop//abc.xml”); Node root = doc.getElementsByTagName(“Abase”).item(0); NodeList listOfNodes = root.getChildNodes(); //Sysout Prints 13 所以这里我的逻辑运行良好。当我尝试通过将相同的XML推送到队列并读取它并获取子节点时,它给了我没有。 子节点数为6。 Document doc=docBuilder.parse(new InputSource(new ByteArrayInputStream(msg.getBytes(“UTF-8”)))); Node root = doc.getElementsByTagName(“Abase”).item(0); NodeList listOfNodes = root.getChildNodes(); //Sysout Prints 6 这搞砸了我解析XML的逻辑。任何人都可以帮助我吗? UPDATE 添加发送逻辑: javax.jms.TextMessage tmsg = session.createTextMessage(); tmsg.setText(inp); sender.send(tmsg); 问题如果我从桌面读取这个xml它会说13个孩子,6个元素节点和7个文本节点。通用逻辑是: […]

获取ActiveMQ的队列长度的任何简单方法?

如何使用Java获取ActiveMQ中的队列长度(发送到队列的未消耗消息的数量)?

Spring – 动态创建JMSTemplates

我正在使用Spring启动,我想动态创建多个JMS模板,因为我想连接到不同的JMS实例。 我知道使用注释的标准方法,将ConnectionFactory链接到JMSTemplate。 我希望每个不同的JMS实例都有不同的JMSTemplate。 我有当前加载到Map中的连接细节,我想为每个键动态创建一个JMSTemplate。 主要目的是基于地图查找将消息发布到主题目标。 但是对于测试来说,也可以有听众。 潜在方法: 1)将JMSTemplates添加到与Spring Component关联的映射中,并在spring组件映射上查找JMSTemplate。 2)如何使用以下方法动态注册多个jmsTemplate bean: BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(JmsTemplate.class); CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory(); builder.addPropertyValue(“connectionFactory”, cachingConnectionFactory); // set property value DefaultListableBeanFactory factory = (DefaultListableBeanFactory) context.getAutowireCapableBeanFactory(); factory.registerBeanDefinition(“jmsTemplateName”, builder.getBeanDefinition()); 然后查找jms bean – > ctx.getBean(“jmsTemplateName”); 哪种方法有利? 请指教。 乙

Apache Camel:是否可以在不使用Spring的情况下配置WMQ?

目前我正在使用apache camel和wmq。 对于camel配置和路由,我使用的是Java DSL。 但我找不到任何关于如何使用Java DSL配置WMQ的示例。 这是我尝试配置WMQ时得到的结果: config.xml中 //id //vorname //nachname component.xml文件 但是,正如我之前所说,我不想使用Spring来配置它。 我更喜欢使用Java DSL。 可能吗? 如果是,你能给我一些例子或参考吗? 非常感谢您的帮助。 谢谢。

在单线程上下文中使用JMS会话对象的原因

我是JMS的新手。 因此,对于这里的专家而言,这可能是一个非常高的问题。 但是,我很难找到一个关于JMS如何布局工作的非常重要的概念。 来自JMS Session的Javadoc (大胆强调我的) Session对象是用于生成和使用消息的单线程上下文 。 虽然它可以在Java虚拟机(JVM)之外分配提供程序资源,但它被视为轻量级JMS对象。 我认为JMS的主要优点是异步传递消息 。 术语异步自动适用于同时生成和使用消息的多个线程的概念。 所以我对所有重要的Session对象的单线程上下文的概念感到困惑。 我在这里想念的是什么?