ActiveMQ在Srping中的使用
Spring Boot提供了对JMS(Java Message Service)的自动配置支持,特别是针对ActiveMQ的集成。以下是Spring Boot中使用ActiveMQ的基本步骤:
1. 添加依赖
在pom.xml
文件中添加对Spring Boot Starter ActiveMQ的依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<!-- 如果需要池化连接 -->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
</dependency>
</dependencies>
2. 配置ActiveMQ连接信息
在application.properties
或application.yml
中配置ActiveMQ连接参数:
spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=wstv
spring.activemq.password=wstv1232131
3. 创建JMS配置类(注解方式)
如果需要自定义更多的JMS配置,可以创建一个配置类,例如:
@Configuration
public class JmsConfig {
@Bean
public JmsListenerContainerFactory<?> myFactory(ConnectionFactory connectionFactory,
DefaultJmsListenerContainerFactoryConfigurer configurer) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
// 设置会话自动确认
configurer.configure(factory, connectionFactory);
// 自定义配置
factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
return factory;
}
}
4. 创建消息生产者
@Component
public class ProducerService {
@Autowired
private JmsMessagingTemplate jmsTemplate;
@Value("${queue.name}")
private String queueName;
public void sendMessage(String message) {
jmsTemplate.convertAndSend(queueName, message);
}
}
5. 创建消息消费者
@Component
public class ConsumerService {
@JmsListener(destination = "${queue.name}")
public void receiveMessage(String message) {
System.out.println("Received message: " + message);
// 在此处处理消息
}
}
3. 创建JMS配置类(硬编码手动监听器方式)
1. 配置连接工厂
首先,你需要在配置类中创建一个ConnectionFactory
bean:
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.jms.ConnectionFactory;
@Configuration
public class JmsConfig {
@Bean
public ConnectionFactory jmsConnectionFactory() {
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory();
activeMQConnectionFactory.setBrokerURL("tcp://localhost:61616");
activeMQConnectionFactory.setUserName("admin");
activeMQConnectionFactory.setPassword("admin");
return activeMQConnectionFactory;
}
}
2. 创建JMS Template
import org.springframework.jms.core.JmsTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MessagingConfig {
@Autowired
private ConnectionFactory jmsConnectionFactory;
@Bean
public JmsTemplate jmsTemplate() {
JmsTemplate jmsTemplate = new JmsTemplate(jmsConnectionFactory);
// 设置其他的JmsTemplate属性(如消息转换器、确认模式等)
return jmsTemplate;
}
}
3. 手动创建消息生产者
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
public class ManualProducerService {
@Autowired
private JmsTemplate jmsTemplate;
public void sendMessageToQueue(String queueName, String message) {
jmsTemplate.convertAndSend(queueName, message);
}
}
4. 手动配置消息监听器
创建一个实现了MessageListener
接口的类,并在Spring容器中创建一个监听器bean:
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsOperations;
import org.springframework.jms.listener.DefaultMessageListenerContainer;
public class ManualConsumerService implements MessageListener, InitializingBean {
@Autowired
private JmsOperations jmsOperations; // 可以是JmsTemplate实例
private final String destinationName = "queue.example";
@Override
public void afterPropertiesSet() throws Exception {
// 创建DefaultMessageListenerContainer并配置
DefaultMessageListenerContainer listenerContainer = new DefaultMessageListenerContainer();
listenerContainer.setConnectionFactory(jmsConnectionFactory());
listenerContainer.setDestinationName(destinationName);
listenerContainer.setMessageListener(this);
listenerContainer.afterPropertiesSet();
listenerContainer.start();
}
@Override
public void onMessage(Message message) {
if (message instanceof TextMessage) {
try {
String receivedMessage = ((TextMessage) message).getText();
System.out.println("Received message from queue: " + receivedMessage);
// 在这里处理消息
} catch (JMSException e) {
// 处理异常
}
}
}
// 如果不在InitializingBean中配置,也可以在配置类中通过@Bean声明DefaultMessageListenerContainer
}
{{{width="auto" height="auto"}}}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!