Rabbitmq 连接数和通道数

Rabbitmq 连接数和通道数,rabbitmq,spring-amqp,Rabbitmq,Spring Amqp,我对兔子和春天不熟悉。我想知道如何管理连接和通道的数量 在我的体系结构中,有两个队列,其中消息根据直接交换上的路由密钥从单个生产者发布。根据我的理解,我需要一个带有2个通道的单一连接,这将是持久的,消息将通过它们发布。我认为这是由Spring自动管理的。但每次发布消息时都会创建一个由单个通道组成的连接。 -如何管理频道和连接?为连接中的每个队列创建单个通道是否正确?如果队列大小增加到10,那么在单个连接中应该使用10个通道 配置文件: <bean id="connectionFac

我对兔子和春天不熟悉。我想知道如何管理连接和通道的数量

在我的体系结构中,有两个队列,其中消息根据直接交换上的路由密钥从单个生产者发布。根据我的理解,我需要一个带有2个通道的单一连接,这将是持久的,消息将通过它们发布。我认为这是由Spring自动管理的。但每次发布消息时都会创建一个由单个通道组成的连接。 -如何管理频道和连接?为连接中的每个队列创建单个通道是否正确?如果队列大小增加到10,那么在单个连接中应该使用10个通道

配置文件:

    <bean id="connectionFactory" class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
        <property name="username" value="test"/>
        <property name="password" value="test"/>
        <property name="host" value="50.16.11.22"/>
        <property name="port" value="5672"/>
    </bean>

<bean id="publisher" class="com.test.code.Publisher">
<constructor-arg ref="amqpTemplate"></constructor-arg>
        </bean>

    <bean id="amqpTemplate" class="org.springframework.amqp.rabbit.core.RabbitTemplate">
    <property name="connectionFactory" ref="connectionFactory"/>
    <property name="mandatory" value="true"></property>
    <property name="exchange" value="x.direct"></property>
    </bean>

    <rabbit:admin connection-factory="connectionFactory" />

    <rabbit:queue name="q.queue1" />    
    <rabbit:queue name="q.queue2" />

    <rabbit:direct-exchange name="x.direct">
        <rabbit:bindings>
            <rabbit:binding queue="q.queue1" key="key1" />
            <rabbit:binding queue="q.queue2" key="key2" />
        </rabbit:bindings>
    </rabbit:direct-exchange>
</beans>
但每次发布消息时都会创建一个由单个通道组成的连接

事实并非如此。每个路由密钥也没有专用通道

CachingConnectionFactory
维护一个持久连接(默认情况下)并缓存通道

第一次发布将创建一个通道并将其放入缓存中。下一次发布将从缓存中获取它。只有当缓存为空时,才会创建一个新通道(然后您将得到两个缓存通道)

您只能同时获得所需数量的频道

但每次发布消息时都会创建一个由单个通道组成的连接

事实并非如此。每个路由密钥也没有专用通道

CachingConnectionFactory
维护一个持久连接(默认情况下)并缓存通道

第一次发布将创建一个通道并将其放入缓存中。下一次发布将从缓存中获取它。只有当缓存为空时,才会创建一个新通道(然后您将得到两个缓存通道)


您只能同时获得所需数量的频道。

Russel是的,我理解您的解释,但上面的代码在每次发送消息时都会创建一个新连接。代码可能存在一些问题,我无法理解。您的建议毫无意义;请提供一些证据(调试日志、屏幕截图等),Russel是的,我理解你的解释,但上面的代码在每次发送消息时都会创建一个新的连接。代码可能存在一些问题,我无法理解。您的建议毫无意义;请提供一些证据(调试日志、屏幕截图等),
public class Publisher {

    public Publisher(RabbitTemplate rabbitTemplate) {   
     this.rabbitTemplate = rabbitTemplate;
    }

    public void messageToQueue1(JSONObject message) {

        amqpTemplate.convertAndSend("key1", message.toString());
    }

    public void messageToQueue2(JSONObject message) {
        amqpTemplate.convertAndSend("key2", message.toString());
    }
    }