当前位置: 首页 > 知识库问答 >
问题:

spring boot activemq使用者连接池

潘畅
2023-03-14

是否需要Spring Boot ActiveMQ使用者连接池来配置?我在spring boot应用程序中只有一个消费者(作为一个微服务),生产者在另一个应用程序中。我对以下内容并不感到困惑:(摘自http://activemq.apache.org/spring-support.html)

注意:虽然PooledConnectionFactory确实允许创建活动使用者的集合,但它并不“聚集”使用者。池对于连接、会话和生产者是有意义的,它们可能是很少使用的资源,创建它们的成本很高,并且可以以最小的成本保持空闲。另一方面,消费者通常只是在启动时创建并继续使用,在传入消息到来时处理传入消息。当使用者完成时,最好关闭它,而不是让它闲置,然后返回池中以便以后重用:这是因为,即使使用者空闲,ActiveMQ也会将消息传递到使用者的预取缓冲区,直到使用者重新激活为止。

在同一页面中,我可以看到:
您可以使用activemq-pool org.apache.ActiveMQ.pool.PooledConnectionFactory来高效地将连接和会话池化到使用者集合中,或者您可以使用Spring JMS org.SpringFramework.JMS.Connection.CachingConnectionFactory来实现相同的效果

我尝试了CachingConnectionFactory(可以使用ActiveMQConnectionFactory),其中它只有很少的setter来保存我知道一个连接可以给你多个会话,那么每个会话你有多个消费者/生产者。但我的问题是消费者,我们如何集合,正如上面的声明所说的,让它违约。所以我只通过一个方法来实现:
@bean public JmsListenerContainerFactory myFactory(ConnectionFactory ConnectionFactory,DefaultJMSListenerContainerFactoryConfigureer Configureer){

    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    // This provides all boot's default to this factory, including the message converter
    factory.setConcurrency("3-10");
    configurer.configure(factory, connectionFactory);
    // You could still override some of Boot's default if necessary.
    return factory;
}</em><br>

动态缩放这个链接也暗示了这一点,但我找不到具体的解决方案。

是否有人遇到过这种情况,请给出您的建议。感谢您阅读这篇文章,并感谢您提供的任何帮助。生产的其他详细信息:

共有1个答案

洪通
2023-03-14

activemq中有一个名为org.apache.activemq.jms.pool的包,它提供PooledConsumer。下面是它的代码。请检查一下,看看它是否对你有用。我知道这不是春天的方式,但你可以很容易地管理定制你的投票方法。

PooledConnectionFactory pooledConFactory = null;
    PooledConnection pooledConnection = null;
    PooledSession pooledSession = null;
    PooledMessageConsumer pooledConsumer = null;
    Message message = null;
    try
    {
        // Get the connection object from PooledConnectionFactory
        pooledConFactory = ( PooledConnectionFactory ) this.jmsTemplateMap.getConnectionFactory();
        pooledConnection = ( PooledConnection ) pooledConFactory.createConnection();
        pooledConnection.start();

        // Create the PooledSession from pooledConnection object
        pooledSession = ( PooledSession ) pooledConnection.createSession( false, 1 );

        // Create the PooledMessageConsumer from session with given ack mode and destination
        pooledConsumer = ( PooledMessageConsumer ) pooledSession.
                createConsumer( this.jmsTemplateMap.getDefaultDestination(), <messageFilter if any>);

        while ( true )
        {
            message = pooledConsumer.receiveNoWait();
            if ( message != null) 
                break;
        }

    }
    catch ( JMSException ex )
    {
        LOGGER.error("JMS Exception occured, closing the session", ex );
    }
    return message;
 类似资料:
  • 我有一个PHP应用程序,使用RabbitMQ。为了实现冗余,我创建了一对RabbitMQ服务器,并将它们连接到一个集群中。我也有一个VyOS故障转移群集运行HAProxy负载平衡连接,并在故障转移的情况下提供重新路由。 昨天,我们的VyOS集群决定需要故障转移(可能是短暂的网络中断)。在一个VyOS上停止了HA代理,虚拟IP被移动,并在另一个节点上重新启动HA代理。 之后,我查看了Rabbit中的

  • 我正在使用Apache Camel和Spring Boot。我在没有任何服务器的情况下使用我的spring boot应用程序作为jar。

  • 我正在用vaadin和spring开发一个Web应用程序java,比如容器和eclipse链接,比如持久化框架。现在我想在我的应用程序中使用一个连接池。我在谷歌上读了一些我还没读到的东西。这是我的应用程序配置: 我的春日文脉 我的persistence.xml 但我得到以下异常:

  • 下面是Qpid客户端的配置,使用Camel上下文连接Artemis Broker。 上下文文件正像预期的那样开始,但是在本例中,qpid客户机无法连接到Apache Artemis 2.14.0代理。 我所看到的只是消费者端的一些线程块。 common-context.xml 注意:在使用CAMEL2.20.0版本时,即使在所有上下文都得到的情况下,这个单个xml文件中也有两个camel上下文

  • 本文向大家介绍sqlalchemy 使用连接,包括了sqlalchemy 使用连接的使用技巧和注意事项,需要的朋友参考一下 示例 您可以使用上下文管理器打开连接(即从池中请求一个连接): 有无,但必须手动将其关闭: