Количество соединений и каналов - PullRequest
0 голосов
/ 24 июня 2019

Я новичок в Rabbitmq и Spring.Я хочу знать, как управлять количеством соединений и каналов.

В моей архитектуре есть 2 очереди, в которых сообщения публикуются от одного производителя на основе ключа маршрутизации при прямом обмене.Насколько я понимаю, мне понадобится одно соединение с двумя каналами, которое будет постоянным, и через них будут публиковаться сообщения.Я предположил, что это управляется весной автоматически.Но соединение, состоящее из одного канала, создается каждый раз при публикации сообщения.- Как мне управлять каналами и соединениями?Правильный ли подход - создать отдельный канал для каждой очереди в соединении?Если размер очереди увеличивается до 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>

Это мой класс Publisher

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());
    }
    }

1 Ответ

1 голос
/ 24 июня 2019

Но соединение, состоящее из одного канала, создается каждый раз, когда публикуется сообщение.

Это не правда. Для каждого ключа маршрутизации также нет выделенного канала.

CachingConnectionFactory поддерживает одно постоянное соединение (по умолчанию) и каналы кэшируются.

Первая публикация создает канал и помещает его в кэш. Следующая публикация получает его из кэша. Только если кеш пуст, создается новый канал (и тогда у вас будет 2 кешированных канала).

Одновременно вы получите столько каналов, сколько вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...