Я создаю простую службу 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 project-defaults.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;
Наконец, мой MDB имеет следующие аннотации, позволяющие ему читать из очереди:
@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]
Я не совсем уверен, что я упустил в своей конфигурации, котораявызывая эту проблему.Кто-нибудь может пролить свет на то, что я делаю неправильно?