Если вы хотите создать пункт назначения qpid для издателя сообщений в Spring Integration jms. В качестве примера я могу создать такую очередь:
<bean id="theTestQueue" class="org.apache.qpid.client.AMQQueue">
<constructor-arg name="address" value="testQueue" />
<property name="create" value="ALWAYS"/>
<property name="node">
<bean class="org.apache.qpid.client.messaging.address.Node">
<constructor-arg name="name" value="testQueue"/>
<property name="durable" value="true"/>
</bean>
</property>
</bean>
После этого я установил эту очередь в адаптер канала:
<int:channel id="testChannel"/>
<int-jms:outbound-channel-adapter channel="testChannel" destination="theTestQueue" session-transacted="true"/>
Если издатель отправит первое сообщение, очередь будет создана на брокере сообщений.
Но что мне делать, если я хочу устанавливать очереди динамически?
<int:channel id="testChannel"/>
<int-jms:outbound-channel-adapter destination-expression="headers.destination" channel="testChannel"/>
Издатель выглядит так:
@Publisher(channel = "testChannel")
public Message<?> sendMessage (Message<?> message, @Header("destination") String name) {
return message;
}
Второй параметр метода издателя — это имя пункта назначения. Это работает, если я создаю очередь на стороне брокера, прежде чем отправлять сообщение. Моим текущим решением является создание jmx mbean до того, как издатель отправит первое сообщение. Но я хочу использовать jmx-соединения как можно меньше. Есть ли возможность создать очередь автоматически? А может с фабрикой без jmx...
Спасибо за помощь. :)