Java Thorntail JMS到远程ActiveMQ服务器?

Java Thorntail JMS到远程ActiveMQ服务器?,java,jms,activemq-artemis,thorntail,Java,Jms,Activemq Artemis,Thorntail,我正在创建一个简单的Thorntail服务,它将向远程ActiveMQ队列写入一条文本消息,并让MDB使用该消息。为了测试这一点,我让ActiveMQ在本地Docker容器中运行。我的docker compose.yml文件的相关部分如下所示: activemq: image: webcenter/activemq ports: - 1883:1883 - 5672:5672 - 8161:8161 - 61613:61613

我正在创建一个简单的Thorntail服务,它将向远程ActiveMQ队列写入一条文本消息,并让MDB使用该消息。为了测试这一点,我让ActiveMQ在本地Docker容器中运行。我的
docker compose.yml
文件的相关部分如下所示:

activemq:
  image: webcenter/activemq
  ports:
      - 1883:1883
      - 5672:5672
      - 8161:8161
      - 61613:61613
      - 61614:61614
      - 61616:61616
  environment:
      - ACTIVEMQ_CONFIG_NAME=holocron-mq
      - ACTIVEMQ_CONFIG_DEFAULTACCOUNT=false
      - ACTIVEMQ_ADMIN_LOGIN=mqadmin
      - ACTIVEMQ_ADMIN_PASSWORD=password
      - ACTIVEMQ_CONFIG_QUEUES_queue1=myqueue1
      - ACTIVEMQ_CONFIG_SCHEDULERENABLED=true
      - ACTIVEMQ_USERS_edgeproducer=password
      - ACTIVEMQ_USERS_edgeconsumer=password
My Thorntail
项目默认值.yml
文件已配置为使用此配置连接到此“远程”服务器:

swarm:
  network:
    socket-binding-groups:
      standard-sockets:
        outbound-socket-bindings:
          remote-activemq-socket-binding:
            remote-host: 127.0.0.1
            remote-port: 61616
  messaging-activemq:
    servers:
      default:
        remote-connectors:
          remote-activemq-connector:
            socket-binding: remote-activemq-socket-binding
        pooled-connection-factories:
          remote-connection-factory:
            user: edgeproducer
            password: password
            connectors:
              - remote-activemq-connector
            entries:
              - 'java:/jms/remote-mq'
              - 'java:/DefaultJMSConnectionFactory'
        jms-queues:
          session-tracking-queue:
            entries:
              entry: 'java:/jms/queue/testQueue'
我的JAX-RS服务具有以下2个JMS属性,以(最终)允许我写入队列:

@Inject
@JMSConnectionFactory("java:/jms/remote-mq")
private JMSContext jmsContext = null;

@Resource(mappedName = "java:/jms/queue/testQueue")
private Queue processingQueue = null;
@MessageDriven(activationConfig = {
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "destination", propertyValue = "java:/jms/queue/testQueue"),
        @ActivationConfigProperty(propertyName = "maxSession", propertyValue = "10") })
@ResourceAdapter("remote-connection-factory")
最后,我的MDB具有以下注释,允许它从队列中读取:

@Inject
@JMSConnectionFactory("java:/jms/remote-mq")
private JMSContext jmsContext = null;

@Resource(mappedName = "java:/jms/queue/testQueue")
private Queue processingQueue = null;
@MessageDriven(activationConfig = {
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "destination", propertyValue = "java:/jms/queue/testQueue"),
        @ActivationConfigProperty(propertyName = "maxSession", propertyValue = "10") })
@ResourceAdapter("remote-connection-factory")
但是,当我启动Thorntail uberjar时,会出现以下错误:

AMQ214031: Failed to decode buffer, disconnect immediately.: java.lang.IllegalStateException: java.lang.IllegalArgumentException: AMQ119032: Invalid type: 1
AMQ212037: Connection failure has been detected: java.lang.IllegalArgumentException: AMQ119032: Invalid type: 1 [code=GENERIC_EXCEPTION]

我不确定我的配置中到底遗漏了什么导致了这个问题。有人能解释一下我做错了什么吗?

您正试图将ActiveMQ Artemis“核心”JMS客户端(即Thorntail中的默认JMS客户端实现)与ActiveMQ 5.x代理一起使用。ActiveMQ Artemis是下一代ActiveMQ消息代理,Artemis核心JMS客户端无法与5.x代理进行通信。我建议您在Docker容器中使用ActiveMQ Artemis。它与5.x代理支持的OpenWire JMS客户端实现向后兼容,还支持所有其他协议(如AMQP、STOMP、MQTT)。

您使用的是哪个版本的ActiveMQ?似乎有一个类似的问题,升级有帮助…我使用的Docker映像是针对ActiveMQ 5.14.3的。你知道什么版本可以解决这个问题吗?这家伙也有同样的问题[org.apache.activemq.artemis.core.client]AMQ214031:无法解码缓冲区,立即断开连接。:java.lang.IllegalStateException:java.lang.IllegalArgumentException:AMQ119032:无效类型:1--所以我想你的问题是相关的。但是从线程中我无法找到解决方案。轰!成功了!谢谢你的帮助@暗影侠你做了什么?使用独立(docker)Artemis服务器?我正在使用您的配置,但我总是收到以下错误:“WFLYCTL0180:缺少/不可用依赖项的服务”=>[“jboss.naming.context.java.module.booking.booking.DefaultJMSConnectionFactory缺少[jboss.naming.context.java.jboss.DefaultJMSConnectionFactory],“jboss.deployment.unit.\”booking.war\“.component.ExampleMdb.CREATE缺少[jboss.ra.remote connection factory]”]