Я хотел бы получать сообщения с помощью прослушивателя JMS, однако прослушиватель не может обрабатывать сообщения.
Это моя конфигурация для встроенного брокера Artemis.
@Component
public class ArtemisListener {
@JmsListener(destination = "myTopic", containerFactory = "myFactory")
public void listener(Message message){
System.out.println("Message received");
}
}
Я запускаю тест. В журналах я вижу, что очередь создана, сообщение отправляется на указанный адрес, а также создается потребитель, но сообщение не используется. .
Я хотел бы получать сообщения с помощью прослушивателя JMS, однако прослушиватель не может обрабатывать сообщения. Это моя конфигурация для встроенного брокера Artemis. [code]@Component @EnableJms public class ArtemisConfig { private static final String TOPIC_NAME = "myTopic";
@Bean public static ConnectionFactory connectionFactory() { ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); return new CachingConnectionFactory(connectionFactory); }
@Bean public void activeMQServer() throws Exception { Configuration configuration = new ConfigurationImpl(); configuration.setPersistenceEnabled(false); configuration.setSecurityEnabled(false);
Map params = new HashMap(); params.put("host", "localhost"); params.put("port", 61616); params.put("Schema", "tcp"); TransportConfiguration transportConfiguration = new TransportConfiguration( NettyAcceptorFactory.class.getName(), params);
ActiveMQServer server = ActiveMQServers.newActiveMQServer(configuration);
CoreAddressConfiguration coreAddressConfiguration = new CoreAddressConfiguration(); coreAddressConfiguration.setName(TOPIC_NAME) .addRoutingType(RoutingType.MULTICAST); configuration.addAddressConfiguration(coreAddressConfiguration);
QueueConfiguration queueConfiguration = new QueueConfiguration(TOPIC_NAME); queueConfiguration.setAddress(TOPIC_NAME); queueConfiguration.setName(TOPIC_NAME); queueConfiguration.setRoutingType(RoutingType.MULTICAST); queueConfiguration.setDurable(true); configuration.addQueueConfiguration(queueConfiguration);
server.start(); }
@Bean(name = "jmsTemplate") public JmsTemplate jmsTemplate(ConnectionFactory connectionFactory) { JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory); return jmsTemplate; }
@Bean public JmsListenerContainerFactory myFactory( ConnectionFactory connectionFactory, DefaultJmsListenerContainerFactoryConfigurer configurer) { DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); configurer.configure(factory, connectionFactory); factory.setPubSubDomain(true); factory.setConcurrency("1-4"); return factory; } } [/code] Это мой прослушиватель, который получает сообщение из очереди [code]@Component public class ArtemisListener {
@JmsListener(destination = "myTopic", containerFactory = "myFactory") public void listener(Message message){ System.out.println("Message received"); } } [/code] Я запускаю тест. В журналах я вижу, что очередь создана, сообщение отправляется на указанный адрес, а также создается потребитель, но сообщение не используется. . [code]@RunWith(SpringRunner.class) @SpringBootTest(classes = {ArtemisConfig.class}) public class ArtemisIT {
@Autowired JmsTemplate jmsTemplate;
@Test public void checkIfListenerWorks() throws InterruptedException { jmsTemplate.convertAndSend("myTopic", "Hello"); Thread.sleep(2000); } } [/code] Я не вижу сообщения «Получено сообщение» в своих журналах. [code]AMQ601065: User anonymous is creating a queue on target resource: ServerSessionImpl(jms-session=*N/A*) [with parameters: [QueueConfiguration [id=null, name=730d9da3-3d8c-4042-8ef8-c51788f646a5, address=myTopic, routingType=MULTICAST, filterString=null, durable=false, user=null, maxConsumers=-1, exclusive=null, groupRebalance=null, groupBuckets=null, groupFirstKey=null, lastValue=null, lastValueKey=null, nonDestructive=null, purgeOnNoConsumers=false, consumersBeforeDispatch=null, delayBeforeDispatch=null, consumerPriority=null, autoDelete=null, autoDeleteDelay=null, autoDeleteMessageCount=null, ringSize=null, configurationManaged=null, temporary=true, autoCreateAddress=null, internal=null, transient=null, autoCreated=false]]]
AMQ601265: User anonymous is creating a core consumer on target resource ServerSessionImpl(jms-session=*N/A*) [with parameters: [0, 730d9da3-3d8c-4042-8ef8-c51788f646a5, null, 0, false, true, null]]
AMQ601500: User anonymous is sending a core message on target resource: ServerSessionImpl(jms-session=*N/A*) [with parameters: [TransactionImpl [xid=null, txID=13, xid=null, state=ACTIVE, createTime=1721642690458(Mon Jul 22 10:04:50 UTC 2024), timeoutSeconds=300, nr operations = 0]@78c18d2c, CoreMessage[messageID=0,durable=true,userID=d57b5c8f-4811-11ef-b49b-8045dd328039,priority=4, timestamp=Mon Jul 22 10:04:50 UTC 2024,expiration=0, durable=true, address=myTopic,size=480,properties=TypedProperties[__AMQ_CID=d5352bca-4811-11ef-b49b-8045dd328039,_AMQ_ROUTING_TYPE=1]]@1550453457, true, false, RoutingContextImpl(Address=null, routingType=null, PreviousAddress=null previousRoute:null, reusable=null, version=0) [/code] Требуются ли какие-либо изменения в моей конфигурации? Поскольку я вижу журналы выключения сервера сразу после отправки сообщения.
Я пытаюсь проверить свой код продюсера JMS в моем приложении Spring Boot с встроенным ActiveMQ Artemis.
Следующее мое код, чтобы запустить встроенный брокер с тремя очередями test.queue.0 , test.queue.1 и test.queue.2
Configuration...
В настоящее время я использую два приложения C++: одно выступает в качестве издателя, а другое — в качестве подписчика. Оба приложения созданы с использованием C++. Я использую Apache ActiveMQ Artemis версии 2.28.0. Проблема, с которой я столкнулся,...
Я просто попадаю в ActiveMq Artemis с использованием клиента .net.
В моем случае мне нужно употреблять сообщение, взять данные и отправить его для обработки где -то за пределами моего клиентского приложения. После того, как он был успешно...
У меня есть огромное приложение, использующее JMS для связи. К сожалению, на данный момент все сообщения синхронны, и мы используем метод JmsTemplate#sendAndReceive.
Хорошо, это работает! Но....
Если у нас есть таймаут, производитель закрывает...
Я столкнулся с jakarta.jms.JMSException: не удалось создать ошибку фабрики сеанса при попытке доступа к тестовому встроенному серверу ActiveMQ Artemis в Spring Boot. Вот моя установка:
jakarta.jms.JMSException: не удалось создать фабрику сеансов...