从本地运行的activemq获取消息时遇到问题。我可以生产到队列中,我的电脑也注册为生产者。但是,计算机上的另一个spring应用程序应该配置为侦听器。到目前为止它还不起作用。activemq正在监听默认端口。
发件人的我的jms配置:
package at.dkepr.queueservice;
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.jms.Queue;
@Configuration
public class JmsConfig {
@Bean
public Queue queue(){
return new ActiveMQQueue("indexing-queue");
}
}
这就是消费者:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
import at.dkepr.entity.UserSearchEntity;
@Component
@EnableJms
public class JmsConsumer {
private final Logger logger = LoggerFactory.getLogger(JmsConsumer.class);
@JmsListener(destination = "indexing-queue", containerFactory = "jmsListenerContainerFactory")
public void receive(UserSearchEntity user){
logger.info(user.getEmail());
}
}
在 application.propertiers
我添加了必要的属性:
spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin
还有 UserSearchEntity
工具 Serializable
.
据我所知,对于这个设置,我甚至不需要消费者的配置。我加了一个。
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
@Configuration
@EnableJms
public class ConsumerConfig {
@Value("${spring.activemq.broker-url}")
private String brokerUrl;
@Bean
public ActiveMQConnectionFactory activeMQConnectionFactory() {
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory();
activeMQConnectionFactory.setBrokerURL(brokerUrl);
return activeMQConnectionFactory;
}
@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(activeMQConnectionFactory());
factory.setConcurrency("1-3");
return factory;
}
}
我没有收到任何错误日志。不幸的是,它只是无所作为。
这是activemq web控制台的屏幕截图,其中包含排队消息:
当我截取这个屏幕截图时,我的消费应用程序正在运行,但是代理显然没有识别它,因为“消费者数量”是 0
.
编辑:我刚刚尝试将侦听器添加到生产者所在的同一个spring应用程序中。令人惊讶的是,听众的沟通很好。问题似乎在于不同的spring应用程序。不过,我还是用了同样的方法 application.properties
对于这两个spring应用程序。配置文件也一样。
1条答案
按热度按时间wtlkbnrh1#
对于每个有同样问题的人:
对我来说,这是一个文件夹结构的简单问题。由于某种原因
Application.java
因为消费者服务在子文件夹中。在我搬家之后Application.java
一个文件夹打开,到activemq的连接就工作了。