要解决这个问题,你需要确保已正确配置和使用@JmsListener注解,并在代码中正确处理消息。以下是一个示例解决方案:
org.apache.activemq
activemq-spring-boot-starter
5.16.0
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.boot.autoconfigure.jms.DefaultJmsListenerContainerFactoryConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;
import org.springframework.jms.core.JmsTemplate;
import javax.jms.ConnectionFactory;
@Configuration
@EnableJms
public class ActiveMQConfig {
// 配置ActiveMQ连接工厂
@Bean
public ConnectionFactory connectionFactory() {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
factory.setBrokerURL("tcp://localhost:61616"); // ActiveMQ服务器地址
factory.setUserName("admin"); // 用户名
factory.setPassword("admin"); // 密码
return factory;
}
// 配置JmsTemplate
@Bean
public JmsTemplate jmsTemplate(ConnectionFactory connectionFactory) {
JmsTemplate jmsTemplate = new JmsTemplate();
jmsTemplate.setConnectionFactory(connectionFactory);
return jmsTemplate;
}
// 配置JmsListenerContainerFactory
@Bean
public JmsListenerContainerFactory> jmsListenerContainerFactory(ConnectionFactory connectionFactory,
DefaultJmsListenerContainerFactoryConfigurer configurer) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
configurer.configure(factory, connectionFactory);
return factory;
}
}
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
@Component
public class MessageListener {
@JmsListener(destination = "queueName") // 指定监听的队列名称
public void handleMessage(String message) {
// 处理接收到的消息
System.out.println("Received message: " + message);
}
}
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Component;
@Component
public class MessageSender {
private final JmsTemplate jmsTemplate;
public MessageSender(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
public void sendMessage(String message) {
jmsTemplate.convertAndSend("queueName", message); // 发送消息到指定队列
}
}
现在,当你调用MessageSender
的sendMessage
方法发送消息到队列时,MessageListener
中带有@JmsListener
注解的方法将会被自动调用来处理接收到的消息。