当前位置: 首页 > 知识库问答 >
问题:

首次访问后在代理上创建jms队列

澹台镜
2023-03-14

如果要在spring integration 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方法的第二个参数是目标的名称。如果我在发送消息之前在brokerside上创建队列,那么这是可行的。我当前的解决方案是在发布者发送第一条消息之前由jmx mbean创建。但我希望尽可能少地使用jmx连接。是否有机会自动创建队列?或者是没有jmx的工厂。。。

感谢您的帮助。:)

共有1个答案

爱茂勋
2023-03-14

正如您可能注意到的那样,destination属性需要一个bean引用(id)。从另一方面来看,目标表达式也可以计算为目标对象。

如果你有组织。阿帕奇。qpid。客户AMQQueuebean定义对于所有这些“动态目标”,您只需要改进表达式,从应用程序上下文中获得适当的bean

destination-expression="@beanFactoryAccessor.get(headers.destination)"

其中,beanFactoryAccessor是一个简单的bean,它被注入BeanFactory,通过提供的名称调用它的getBean()。

 类似资料:
  • 嗨,我正在使用嵌入式代理Qpid测试Spring集成项目。但问题是我如何在qpid中制作队列和交换。我以为rabbit-config.xml会在qpid代理中制作队列和交换,但无济于事。我的流程是在qpid代理中创建队列和交换,将消息传递给它们,绑定到这些队列的入站amqp适配器将收到消息,我可以继续测试 错误:队列:“推送”。顾客阿科纳。控制器。搜索“未在VirtualHost”default上

  • 我有一个RestHighLevelClient连接到一个远程elasticDB,它位于一个反向代理后面,该代理剥离了ssl。 当我打电话的时候 我得到一个握手失败的例外 正如这里和这里所描述的,我检查了日志,发现了ClientHello 服务员:你好 客户端和服务器都同意密码套件TLS_ECDHE_RSA_和_AES_128_GCM_SHA256 然后以加密和纯文本的形式跟踪请求。然后是另一个Cl

  • 我在域模式下运行Wildfly17。我们一直在手动添加JMS队列,但我宁愿将配置作为部署脚本的一部分添加。我可以使用创建服务器和数据源,但在队列方面似乎没有任何进展。我希望domain_config.xml的结尾如下所示: 我已经研究了如何在Wildfly中使用CLI设置消息传递子系统,但我得到的都是错误。 domain_config.xml的完整嵌套是:

  • 我认为最初的作者认为这将创建一个持久的队列,但显然不是。我找不到这方面的好文档,想知道是否有人能证实/否认这一点。 提前谢了。

  • 问题内容: 背景 我是PHP和前端Web开发人员,使用Netbeans在Java中开发应用程序以从Websphere(我认为是V8.5)JMS队列中进行读取,然后向适当的脚本/服务器发出命令。这是我10年来第一次使用Java进行专业学习,因此请多多包涵。我的初始测试应用程序在托管jms队列的服务器上运行良好,但是当尝试从远程位置进行连接时我遇到了一个接一个的错误(此刻恰好是Windows,但最终将