Tag: jms

jms制作人与spring的表现

我创建了一个基于spring,jms和activemq的简单的生产者消费者模拟,我试图从双方,生产者和消费者那里获得高性能, 连接设置: 消费者设置: 制片人设置: 从消费者开始,我设法每秒消耗大约25条消息,这非常慢,我发现瓶颈是我正在使用交易,谷歌搜索一下,然后玩配置,我发现自动assemblyDefaultMessageListenerContainer并将cachelevel更改为 listenerContainer.setCacheLevelName(“CACHE_SESSION”) 我的性能增加到每秒约1500条消息,同时仍然有交易。 我的问题是现在生产者仍然停留在每秒约25次操作,我的生产者测试很简单: int numOfMessages = getNumberOfMessages(); double startTime = System.currentTimeMillis(); for (int i = 1; i <= numOfMessages; i++) { jmsTemplate.convertAndSend("HelloWorld" + i); } double endTime = System.currentTimeMillis(); double totalTime=(endTime-startTime)/1000; System.out.println("Time – "+totalTime+" seconds"); System.out.println("EPS – "+numOfMessages/totalTime); 我想知道如何与制作人达成类似的表演,因为它现在已经成为整个系统的瓶颈。

MessageMistener和JMS中的Consumer之间有什么区别?

我是JMS新手。 据我所知, Consumers能够从队列/主题中选择消息。 那么为什么你需要一个MessageListener因为Consumers会知道他们什么时候收到消息? 这样一个MessageListener的实际用途是什么? 编辑:从MessageListener的Javadoc : MessageListener对象用于接收异步传递的消息。 每个会话必须确保它将消息串行传递给侦听器。 这意味着分配给同一会话的一个或多个使用者的侦听器可以假定在会话完成最后一次调用之前,不会使用下一条消息调用onMessage方法。 所以我对这些术语的异步和串行使用感到困惑。 这两个术语在描述MessageListener的function时如何相关?

如何在真实的JMS分布式架构中利用Spring Integration?

对于以下场景,我正在寻找有关最佳实践的建议和提示: 在分布式(主要是基于Java)系统中: 许多(不同的)客户端应用程序(web-app,命令行工具,REST API) 中央JMS消息代理(目前支持使用ActiveMQ) 多个独立处理节点(在多个远程计算机上运行,​​计算由JMS消息有效负载指定的不同类型的昂贵操作) 如何最好地应用Spring Integration框架提供的JMS支持来将客户端与工作节点分离? 在阅读参考文档和一些初步实验时,看起来JMS入站适配器的配置本身就需要使用订户,而订户在解耦方案中不存在。 小方说明:通过JMS文本消息进行通信(使用JSON数据结构以实现未来的可扩展性)。

Active MQ vs JBoss Messaging

我将为项目选择一个JMS消息代理。 JMS服务器稳定并且可以处理大量消息是至关重要的。 我缩小了列表以包含Active MQ和JBoss Messaging。 我想知道你们是否有任何经验,甚至更好的在同一环境中尝试过这两种方法。 任何研究论文或类似论文的链接都会很好。

JDBC和JMS的Spring事务同步

我有一个在jboss上运行的spring web app,当前配置为使用HibernateTransactionManager进行db事务,JmsTransactionManager用于jms。 对于jms,我们使用Camel和ActiveMQ,我们的数据库是DB2。 在一个事务中,我需要将一些记录写入数据库并发送两个异步jms消息。 jms消息是事件通知,我只希望在数据库事务提交时发送它们。 我愿意接受在jdbc事务已经提交之后与代理通信失败的风险(因此没有发送消息但是db已经提交)所以我认为我不需要正确的XA。 我相信我需要的是使用spring transaction同步的“尽力而为”的事务管理。 Spring文档提示了spring将同步两个事务并仅在jdbc事务提交后提交jms事务这一事实 – 但我不认为它非常清楚。 这里的spring文档http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html#tx-resource-synchronization没有详细介绍它是如何工作的。 我发现了一些其他的消息来源说spring会做我想要的,包括下面的一些javadoc,我已经编写了一些集成测试,也显示了它。 http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/jms/support/JmsAccessor.html#setSessionTransacted%28boolean%29这里的setSessionTransacted上的javadoc听起来就像我想要的那样。 从我所看到的,我认为创建Camel JmsConfiguration并将事务处理设置为true就足够了: 然而,我需要说服我工作的人有点怀疑并且认为我的集成测试只能起作用,因为副作用很少而不是有意的弹簧特征。 所以我的问题是 – 我是否正确可以依赖Spring来同步事务并始终在jdbc事务之后提交jms事务,或者这不是我应该依赖的东西,你能否指出我所说的任何官方文档那清楚吗? 我想一般来说这是一个很好的方法,或者我们应该以不同的方式管理这些交易吗?

使用JMS临时队列进行同步使用是一种好习惯吗?

如果我们使用“临时队列”使用JMS请求/回复机制,那么该代码是否可扩展? 截至目前,我们不知道我们是否每秒支持100个请求,或者每秒支持1000个请求。 下面的代码是我正在考虑实现的。 它以“同步”方式使用JMS。 关键部分是创建“消费者”以指向为此会话创建的“临时队列”的位置。 我无法弄清楚使用这样的临时队列是否是可扩展的设计。 destination = session.createQueue(“queue:///Q1”); producer = session.createProducer(destination); tempDestination = session.createTemporaryQueue(); consumer = session.createConsumer(tempDestination); long uniqueNumber = System.currentTimeMillis() % 1000; TextMessage message = session .createTextMessage(“SimpleRequestor: Your lucky number today is ” + uniqueNumber); // Set the JMSReplyTo message.setJMSReplyTo(tempDestination); // Start the connection connection.start(); // And, send the request producer.send(message); System.out.println(“Sent message:\n” […]

JMS负载平衡(1个队列,2个队列连接工厂和1个.bindings)

我正在使用JMS将消息放入队列。 队列与2个QueueConnection工厂和2个队列管理器相关联。 在将消息发送到队列时,我希望通过2个不同的队列连接工厂向2个不同的队列管理器平均分发/发送消息。 例: 在不同的时间点,我的服务接收来自某个用户的消息。我需要同样将消息放入2个QCF / QueueManagers。 (负载均衡) 如果我收到第一条消息,我需要发送到第一个QCF1 /队列管理器,如果另一个消息到达我的服务,我将必须将它发送到第二个QCF1 /队列管理器。 因为JMS允许我一次使用onle 1 QCF创建Queue Coontion。 这可以使用JMS完成吗? 还是另一种方法来实现这一目标? 使用一个QCF向Queue发送消息的方法: import javax.naming.InitialContext; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; import javax.jms.QueueSession; import javax.jms.QueueSender; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; public class Receiver { @Resource(lookup = “jms/ConnectionFactory1”) private static QueueConnectionFactory connectionFactory1; @Resource(lookup = “jms/ConnectionFactory2”) private static QueueConnectionFactory connectionFactory2; @Resource(lookup = “jms/Queue”) […]

如何使用TextMessage将XML文件发送到JMS队列?

Oracle Docs说 – TextMessage对象用于发送包含java.lang.String的消息。 它从Message接口inheritance>并添加一个文本消息体。 此消息类型可用于传输基于文本的消息,包括具有XML>内容的消息。 这怎么可能? XML的内容是否只能发送(通过将其转换为Object然后发送)? XML文件是否可以以任何方式真正放在队列中,然后在接收器端读取?

javax.naming.NameNotFoundException:jms

我有这个非常简单的代码(Glassfish 3.1.2): Context ic = new InitialContext(); ConnectionFactory connectionFactory = (ConnectionFactory) ic.lookup(“jms/ConnectionFactory”); 但第二行引发了一个exception: SEVERE: javax.naming.NamingException: Lookup failed for ‘jms/ConnectionFactory’ in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: jms] at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518) at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455) at javax.naming.InitialContext.lookup(InitialContext.java:392) at javax.naming.InitialContext.lookup(InitialContext.java:392) at org.apache.jsp.room_jsp._jspService(room_jsp.java from :195) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111) at javax.servlet.http.HttpServlet.service(HttpServlet.java:770) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:403) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377) at javax.servlet.http.HttpServlet.service(HttpServlet.java:770) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542) at […]

如何在WildFly 10中动态更改JMS队列MDB池大小

我正在使用WildFly 10.1,它与Artemis一起作为新的JMS提供程序提供,但我无法找到如何动态更改特定MDB的使用者线程数。 我有一个队列,消息监听器(MDB)消耗来自队列的消息,现在我想动态控制域必须启动的最大消费者线程数。 如何使用CLI执行此操作?