Моя цель + ПрогрессActiveMQ встроенный брокер тему к очереди моста с XML конфигурации
меня интересует с помощью ActiveMQ, чтобы опубликовать сообщение в тему и он мост в несколько очередей. Мне удалось добиться этого с помощью командной строки брокера, предоставляя XML-конфигурацию, содержащую составную тему:
<destinationInterceptors>
<virtualDestinationInterceptor>
<virtualDestinations>
<compositeTopic name="LOCAL.EC.T">
<forwardTo>
<queue physicalName="LOCAL.EC.Q.1" />
<queue physicalName="LOCAL.EC.Q.2" />
</forwardTo>
</compositeTopic>
</virtualDestinations>
</virtualDestinationInterceptor>
</destinationInterceptors>
Используя эту команду запуска: activemq start xbean:amq.xml
. В этом случае amq.xml
- это мой активный файл конфигурации MQ XML. Здесь больше информации о конфигурации xml: http://activemq.apache.org/xml-configuration.html.
Моя проблема
Если я опубликовать сообщение в этой теме выше с помощью веб-консоли, он показывает в обоих очередях, как и ожидалось. Но теперь я хочу переключиться на использование встроенного брокера.
В следующем коде, я могу сказать, что он использует мой amq.xml
файл (например, когда я могу изменить его я получаю соответствующие ошибки), но когда я публикую в эту тему, получить на блоках очереди навсегда , Если я публикую и получаю одну и ту же тему или очередь, все работает нормально. Почему моя сложная тема здесь не работает?
//Create the broker using the xbean configuration and start it.
brokerService = BrokerFactory.createBroker(new URI("xbean:amq.xml"));
brokerService.setBrokerName("localhost");
brokerService.setPersistent(false);
brokerService.setDeleteAllMessagesOnStartup(true);
brokerService.setUseJmx(false);
brokerService.start();
//Create the connection factory and JMS template.
connectionFactory = new ActiveMQConnectionFactory();
connectionFactory.setBrokerURL("vm://localhost?create=false&jms.redeliveryPolicy.maximumRedeliveries=-1");
//Send the message to the topic.
template = new JmsTemplate(connectionFactory);
ActiveMQMapMessage message = new ActiveMQMapMessage();
message.setString("batch", "Hello World!");
template.convertAndSend("LOCAL.EC.T",message);
//Read the message from the queues.
final Message receive = template.receive("LOCAL.EC.Q.1");
MapMessage received = (MapMessage)receive;
System.out.println(received.getString("batch"));