Я новичок в 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());
}
}