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.propertiesapplication.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
}

image.png{{{width="auto" height="auto"}}}

原文链接 https://www.hanyuanhun.cn | https://node.hanyuanhun.cn

posted @   汉源魂  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示