Tag: activemq

ActiveMQ和CachingConnectionFactory的自动连接问题

我遇到了ActiveMQ和Spring的CachingConnectionFactory 。 我这样设置它们: jms.url正在使用故障转移传输: failover:(tcp://firstbox:6166,tcp://secondbox:6166)?timeout=3000 我遇到的问题是,如果一个盒子出现故障,我们应该开始在另一个盒子上发送消息,但它似乎仍在使用旧连接(每次发送超时)。 如果我重新启动程序,它将再次连接,一切正常。 我的理解是ActiveMQConnectionFactory应该自行修复(重新连接到一个新的框),并且JmsTemplate应该每次都请求一个新的连接,所以这应该没问题。 我想知道CachingConnectionFactory是否可能做坏事(缓存与旧服务器通信的生产者?)。 我错过了我需要做的事吗? 我的设置似乎很正常,但我找不到其他人有这个问题。

如何使Spring JMSListener突发到最大并发线程?

我有一个使用ActiveMQ版本5.10的Spring JMS应用程序。 我正在执行简单的并发测试。 我使用Spring Boot,当前版本和注释来配置JMSListener和消息生成器。 消息生产者只是尽可能快地在队列上抛出消息。 消息侦听器将消息从队列中拉出,但在获取消息后hibernate1秒钟 – 模拟消息侦听器在获取消息后需要执行的一些工作。 我将JMSListener设置为100-1000个并发线程。 如果我同时启动消息生产者和消费者(都在他们自己的JVM中运行),即使最大范围设置为1000,消费者也永远不会超过最小配置的线程。 如果我让生产者首先启动并在队列上放置几千条消息,然后启动一个或多个消费者实例,它将稳定地提升线程,从100开始,然后每秒20个左右的线程,直到达到状态队列中有大约20-30条消息在飞行中。 它永远不会捕获生成器 – 即使消费者没有接近其maxConcurrency计数,也总会有一些消息在队列中。 为什么消息使用者没有突然进入一堆额外的线程来清空队列而不是让队列中有20-30条消息呢? 消费者是否有办法继续快速添加线程以赶上队列中的消息? 以下是代码的相关部分。 消息制作者 @Component public class ClientServiceImpl implements ClientService { private static final String QUEUE=”message.test.queue”; @Autowired private JmsTemplate jmsTemplate; @Override public void submitMessage(ImportantMessage importantMessage) { System.out.println(“*** Sending ” + importantMessage); jmsTemplate.convertAndSend(QUEUE, importantMessage); } } 消息消费者 @SpringBootApplication @EnableJms public class […]

计算JMS队列中的消息数

查看JMS队列并获取其中的所有消息的最佳方法是什么? 如何计算队列中的消息数? 谢谢。

在TLS1.2上创建ActiveMQ连接

我们不得不删除SSLV3支持。 所以我们改变了activemq配置。 我们添加了transportConnector并设置enabledProtocol =’TLS1.1,TLS1.2’。 所以它应该支持TLS1.1或TLS1.2但我不知道如何在创建连接时指定协议。 现在它给了我错误SSLV2Hello被禁用。 所以我的问题是如何在创建连接时给出协议列表。 我试过它SSLSocket但无法通过。 有人可以给我一些线索.. String keyStorePath = “abc.ks”; String keyStorePassword = “XYZ”; String trustStore = “cks.ts”; java.lang.System.setProperty(“javax.net.ssl.keyStore”, keyStorePath); java.lang.System.setProperty(“javax.net.ssl.keyStorePassword”, keyStorePassword); java.lang.System.setProperty(“javax.net.ssl.trustStore”, trustStore); String connectionURL = ‘URL?initialReconnectDelay=10&maxReconnectDelay=10&maxReconnectAttempts=2&jms.watchTopicAdvisories=false&wireFormat.maxInactivityDuration=3600000’; ConnectionFactory factory = new ActiveMQSslConnectionFactory(connectionURL); Connection connection = factory.createConnection(user, pwd);

具有ActiveMQ经纪人网络的JMS消费者

我在经纪人集群的ActiveMQ网络(也称为分布式主题)上有一个JMS主题。 我有一个外部JMS使用者(Weblogic门户网站)需要订阅此主题并获取发送给它的所有消息(跨所有代理)。 如果消费者在其中一个代理上订阅该主题,它只会获得代理收到的消息子集,对吗? 我想我可以为每个代理创建一个消费者并将消息聚合在一起,但是我也处理连接问题并且需要知道哪些代理可用等等。 问题,有没有办法配置代理网络或消费者从分布式JMS主题获取所有消息?

使用JMS或ThreadPool发送电子邮件

我想知道: 我有一个场景。 如果用户将产品添加到系统(我正在开发),则会有一个监听器向用户的客户端发送通知,通知用户添加的新产品。 我已经读过这个post了 (看到我之前从未使用过JMS和ThreadPool )我想知道是否应该使用JMS或ThreadPooling。 我正在使用Tomcat 5.5及更高版本和JBoss 5及更高版本(取决于公司的最后手段)来部署我的Web应用程序。 如果我使用JMS,我是否使用Apache ActiveMQ或JBoss Messaging ? 它们是否兼容在两个平台上运行(Tomcat和JBoss)? 提前致谢。

Tomcat了解amq:broker,但Eclipse标记了架构中的错误

在Eclipse中使用ActiveMQ时,有时可能会出现模式解析错误: Caused by: org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element ‘amq:broker’. 但是,该项目在Tomcat中成功部署。

从JMS MessageListener发出回滚信号

我一直在使用JMS和ActiveMQ。 一切都在创造奇迹。 我不是用spring,也不是我。 接口javax.jms.MessageListener只有一个方法onMessage 。 在实现中,可能会抛出exception。 如果实际上抛出exception,那么我说消息没有正确处理,需要重新尝试。 所以,我需要ActiveMQ等待一段时间,然后重试。 即我需要抛出exception来回滚JMS事务。 我怎样才能完成这样的行为? 也许ActiveMQ中有一些我无法找到的配置。 或者……也许可以取消将MessageListener注册到消费者并自己使用消息,如下所示: while (true) { // … some administrative stuff like … session = connection.createSesstion(true, SESSION_TRANSACTED) try { Message m = receiver.receive(queue, 1000L); theMessageListener.onMessage(m); session.commit(); } catch (Exception e) { session.rollback(); Thread.sleep(someTimeDefinedSomewhereElse); } // … some more administrative stuff } 在几个线程中,而不是注册监听器。 或者……我可以以某种方式装饰/ AOP /字节操作MessageListener来自己做。 你会采取什么途径?为什么? […]

ActiveMQ和嵌入式代理

编辑:改述问题: 我想使用ActiveMQ作为我的服务器和客户端应用程序之间的信使服务。 我试图在服务器中设置一个嵌入式代理(即不是一个单独的进程)来处理生成的消息供我的客户端使用。 此队列是持久的。 经纪人初始化如下: BrokerService broker = new BrokerService(); KahaPersistenceAdapter adaptor = new KahaPersistenceAdapter(); adaptor.setDirectory(new File(“activemq”)); broker.setPersistenceAdapter(adaptor); broker.setUseJmx(true); broker.addConnector(“tcp://localhost:61616”); broker.start(); 经过修修补补后,我最终得到的服务器部分是: public static class HelloWorldProducer implements Runnable { public void run() { try { ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(“tcp://localhost”); // apparently the vm part is all i need Connection connection = connectionFactory.createConnection(); connection.start(); Session […]

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); 我想知道如何与制作人达成类似的表演,因为它现在已经成为整个系统的瓶颈。