是否可以通过更改配置来重新调整连接到 ActiveMQ“Classic”的现有代码以连接到 ActiveMQ Artemis?如果是的话需要修改哪些重要参数?
当前软件部署在 JBoss EAP 7.4.2 上,并与 2 个提供故障转移/HA 支持的远程 ActiveMQ“经典”服务器通信。
在新架构中,ActiveMQ“经典”服务器将被 3 个独立的 ActiveMQ Artemis 服务器(版本 2.16.0)取代,它将提供故障转移/HA。将不会利用 JBoss EAP 中对嵌入式 ActiveMQ Artemis 的支持。
ActiveMQ 资源适配器设置:
<subsystem xmlns="urn:jboss:domain:resource-adapters:6.0">
<resource-adapters>
<resource-adapter id="org.apache.activemq">
<module slot="main" id="org.apache.activemq"/>
<config-property name="RedeliveryBackOffMultiplier">3</config-property>
<config-property name="ServerUrl">failover:(tcp://x.y.z.49:61616,tcp://x.y.z.50:61616)?randomize=false&jms.watchTopicAdvisories=false&timeout=3000</config-property>
<config-property name="RedeliveryUseExponentialBackOff">false</config-property>
<config-property name="UserName">user</config-property>
<config-property name="MaximumRedeliveries">1</config-property>
<config-property name="UseInboundSession">true</config-property>
<config-property name="Password">password</config-property>
<connection-definitions>
<connection-definition class-name="org.apache.activemq.ra.ActiveMQManagedConnectionFactory" jndi-name="java:/ConnectionFactory" enabled="true" tracking="false" use-java-context="true" pool-name="ConnectionFactory">
<config-property name="UseInboundSession">false</config-property>
<pool>
<min-pool-size>4</min-pool-size>
<max-pool-size>256</max-pool-size>
<prefill>true</prefill>
</pool>
<timeout>
<blocking-timeout-millis>12000</blocking-timeout-millis>
<idle-timeout-minutes>5</idle-timeout-minutes>
</timeout>
</connection-definition>
</connection-definitions>
JNDI用于查找连接工厂,使用
InitialContext
如以下代码所示
import javax.inject.Inject;
import javax.jms.ConnectionFactory;
import javax.naming.InitialContext;
import javax.ejb.Singleton;
import javax.ejb.Startup;
@Singleton
@Startup
public class BootClass {
....
@PostConstruct
public void init() {
try {
// "java/ConnectionFactory" defined in resource adapter
final ConnectionFactory cf = (ConnectionFactory) (new InitialContext()).lookup("java:/ConnectionFactory");
// cf is used with Camel JMS component
从技术上讲,您实际上不需要更改 JBoss EAP 中的任何内容,因为 ActiveMQ Artemis 支持 ActiveMQ“Classic”使用的 OpenWire 协议。