首次访问后在代理上创建 jms 队列
Create jms queue on broker after first access
如果要在 spring 集成 jms 上为消息发布者创建 qpid 目标。例如,我可以创建一个这样的队列:
<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;
}
publisher-method 的第二个参数是目的地的名称。如果我在发送消息之前在代理端创建队列,那将有效。我当前的解决方案是在发布者发送第一条消息之前由 jmx mbean 创建。但我想尽可能少地使用 jmx 连接。有机会自动创建队列吗?或者可能是没有 jmx 的工厂...
感谢您的帮助。 :)
您可能会注意到 destination
属性需要一个 Destination
bean 引用 (id
)。从另一边 destination-expression
也可以评估为 Destination
对象。
如果您有 org.apache.qpid.client.AMQQueue
所有那些 "dynamic destinations" 的 bean 定义,您只需要改进表达式以从应用程序上下文中获取适当的 bean
destination-expression="@beanFactoryAccessor.get(headers.destination)"
其中 beanFactoryAccessor
是一些简单的 bean,它被注入 BeanFactory
以通过提供的 name
.
调用它的 getBean()
如果要在 spring 集成 jms 上为消息发布者创建 qpid 目标。例如,我可以创建一个这样的队列:
<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;
}
publisher-method 的第二个参数是目的地的名称。如果我在发送消息之前在代理端创建队列,那将有效。我当前的解决方案是在发布者发送第一条消息之前由 jmx mbean 创建。但我想尽可能少地使用 jmx 连接。有机会自动创建队列吗?或者可能是没有 jmx 的工厂...
感谢您的帮助。 :)
您可能会注意到 destination
属性需要一个 Destination
bean 引用 (id
)。从另一边 destination-expression
也可以评估为 Destination
对象。
如果您有 org.apache.qpid.client.AMQQueue
所有那些 "dynamic destinations" 的 bean 定义,您只需要改进表达式以从应用程序上下文中获取适当的 bean
destination-expression="@beanFactoryAccessor.get(headers.destination)"
其中 beanFactoryAccessor
是一些简单的 bean,它被注入 BeanFactory
以通过提供的 name
.
getBean()