使用 Azure ServiceBus 队列配置 WSO2 4.8.1
Configuring WSO2 4.8.1 with Azure ServiceBus Queue
这是我的场景:
我在我的 WSO2 esb 4.8.1 中配置了一个 messageStore,如下所示:
<messageStore class="org.apache.synapse.message.store.impl.jms.JmsStore" name="JMSTest">
<parameter name="java.naming.factory.initial">org.apache.qpid.amqp_1_0.jms.jndi.PropertiesFileInitialContextFactory</parameter>
<parameter name="java.naming.provider.url">repository/conf/jms-jndi.properties</parameter>
<parameter name="store.jms.connection.factory">JMSMS</parameter>
<parameter name="store.jms.JMSSpecVersion">1.1</parameter>
<parameter name="store.jms.destination">QUEUE</parameter>
</messageStore>
我按照这个official tutorial指示的配置来连接队列。
序列第一次尝试使用此存储来存储消息时,会引发错误并忽略该消息。
[JMSTest-P-1]. Ignored MessageID : urn:uuid:414f50a0-91d2-4bdf-937b-cc283985c947
[JMSTest-P-1] cannot proceed. Message producer is null.
如果我在接下来的 5 分钟内尝试存储一条消息,存储将起作用。但是在这种超时之后,如果我尝试存储消息,则会触发相同的错误。
我尝试通过在管理中编辑 sourceView
将 store.jms.cache.connection
参数添加到 false
,并将 transport.jms.CacheLevel
参数添加到 None
控制台,但如果我在 MessageStore 选项卡中修改配置,这些参数将被删除,因此我不认为它们真的被使用了。
您是否知道要使 messageStore 始终处于活动状态?
谢谢大家的回答
我能够通过降级所使用的 qpid 库来解决我的 "timeout" 问题。
Azure官方教程中没有指定qpid版本,所以我选择了最新的(qpid 0.32)。不要做。
使用 qpid 0.26 和相同配置问题消失。
有关 qpid 0.30
发生相同错误的信息
下面是我在 lib 目录中复制的用于使用 Azure 服务总线队列设置 WSO2 ESB 的 jars,以及我的 conf 文件的内容:
/repository/components/lib/
geronimo-jms_1.1_spec-1.0.jar
qpid-amqp-1-0-client-0.26.jar
qpid-amqp-1-0-client-jms-0.26.jar
qpid-amqp-1-0-common-0.26.jar
/repository/conf/jms-jndi.properties
connectionfactory.JMSMS = amqps://<POLICY_NAME>:<BASE64_ENCODE_POLICY_KEY>@<NAMESPACE>.servicebus.windows.net
queue.QUEUE = <QUEUE_NAME>
注意,您必须在队列级别定义策略,而不是命名空间级别,并且队列在创建时必须不分区。
我希望这对你们中的一些人有所帮助。
这是我的场景:
我在我的 WSO2 esb 4.8.1 中配置了一个 messageStore,如下所示:
<messageStore class="org.apache.synapse.message.store.impl.jms.JmsStore" name="JMSTest">
<parameter name="java.naming.factory.initial">org.apache.qpid.amqp_1_0.jms.jndi.PropertiesFileInitialContextFactory</parameter>
<parameter name="java.naming.provider.url">repository/conf/jms-jndi.properties</parameter>
<parameter name="store.jms.connection.factory">JMSMS</parameter>
<parameter name="store.jms.JMSSpecVersion">1.1</parameter>
<parameter name="store.jms.destination">QUEUE</parameter>
</messageStore>
我按照这个official tutorial指示的配置来连接队列。
序列第一次尝试使用此存储来存储消息时,会引发错误并忽略该消息。
[JMSTest-P-1]. Ignored MessageID : urn:uuid:414f50a0-91d2-4bdf-937b-cc283985c947 [JMSTest-P-1] cannot proceed. Message producer is null.
如果我在接下来的 5 分钟内尝试存储一条消息,存储将起作用。但是在这种超时之后,如果我尝试存储消息,则会触发相同的错误。
我尝试通过在管理中编辑 sourceView
将 store.jms.cache.connection
参数添加到 false
,并将 transport.jms.CacheLevel
参数添加到 None
控制台,但如果我在 MessageStore 选项卡中修改配置,这些参数将被删除,因此我不认为它们真的被使用了。
您是否知道要使 messageStore 始终处于活动状态?
谢谢大家的回答
我能够通过降级所使用的 qpid 库来解决我的 "timeout" 问题。
Azure官方教程中没有指定qpid版本,所以我选择了最新的(qpid 0.32)。不要做。 使用 qpid 0.26 和相同配置问题消失。 有关 qpid 0.30
发生相同错误的信息下面是我在 lib 目录中复制的用于使用 Azure 服务总线队列设置 WSO2 ESB 的 jars,以及我的 conf 文件的内容:
geronimo-jms_1.1_spec-1.0.jar
qpid-amqp-1-0-client-0.26.jar
qpid-amqp-1-0-client-jms-0.26.jar
qpid-amqp-1-0-common-0.26.jar
connectionfactory.JMSMS = amqps://<POLICY_NAME>:<BASE64_ENCODE_POLICY_KEY>@<NAMESPACE>.servicebus.windows.net
queue.QUEUE = <QUEUE_NAME>
注意,您必须在队列级别定义策略,而不是命名空间级别,并且队列在创建时必须不分区。
我希望这对你们中的一些人有所帮助。