springboot整合activemq

springboot整合activemq

前言:

对于刚开始接触activemq的人来说,首先要了解的activemq是什么、干啥用的,然后了解它的优缺点,最后知道它在项目中如何使用。

一、是什么、干啥用的?
activemq是一个消息队列,它是有Apache研发的开源中间件,使用java语言编写。主要作用是:解耦、异步、削峰。

二、优点

  1. 老牌的消息队列,稳定
  2. 使用Java语言编写,源码可以清晰解读(如果你是java程序员)
  3. 对JMS支持最好

三、缺点

  1. 底层采用多线程并发,对资源消耗比较大
  2. 版本更新缓慢,集群需要依赖zookeeper实现。

四、 与springboot整合

市面上绝大多数中间件在与spring整合的时候无疑就三步,导入jar包,添加相应的配置,通过注解或者配置文件在项目中使用。好了废话不多说我们直接上代码。

1. pom.xml

 <!--消息队列连接池-->
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-pool</artifactId>
            <version>5.15.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
        </dependency>

我这里使用的是5.15.0版本的。

  1. 在application中配置
spring.activemq.broker-url= tcp://localhost:61616
#pring.activemq.password=admin
spring.activemq.user=admin
spring.activemq.pool.enabled=true
spring.activemq.pool.max-connections=10
queueName: publish.queue
topicName: publish.topic

这里主要说明的是,我这里的配置文件时application.properties,所以我是这样配置的。但是如果你的配置文件时application.yml就不要这样配置了。按照yml的格式配置,但是里面的配置参数都是一样的。(关于actiovemq的配置参数,我下篇会做详细的讲解,如果你的项目小的话,这几个参数就够了!)

2.代码中编写配置类

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;

import javax.jms.Queue;
import javax.jms.Topic;

@EnableJms
@Configuration
//@PropertySource("${mq.config.url}")
//@PropertySource("classpath:application-dev.properties")
public class ActivemqConfig {

    @Value("${spring.activemq.user}")
    private String usrName;

    @Value("${spring.activemq.password}")
    private  String password;

    @Value("${spring.activemq.broker-url}")
    private  String brokerUrl;

    @Value("${queueName}")
    private String queueName;

    @Value("${topicName}")
    private String topicName;

    @Bean
    public Queue queue(){
        return new ActiveMQQueue(queueName);
    }

    @Bean
    public Topic topic(){
        return new ActiveMQTopic(topicName);
    }

    @Bean
    public ActiveMQConnectionFactory connectionFactory() {
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(usrName, password, brokerUrl);
        return activeMQConnectionFactory;
    }



    @Bean("QueueListenerFactory")
    public JmsListenerContainerFactory jmsListenerContainerQueue(ActiveMQConnectionFactory connectionFactory){
        DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
        bean.setConnectionFactory(connectionFactory);
        bean.setSessionTransacted(false);
        bean.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
        return bean;
    }

    @Bean
    @Qualifier("TopicListenerFactory")
    public JmsListenerContainerFactory jmsListenerContainerTopic(ActiveMQConnectionFactory connectionFactory){
        DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
        //设置为发布订阅方式, 默认情况下使用的生产消费者方式
        bean.setPubSubDomain(true);
        bean.setConnectionFactory(connectionFactory);
        return bean;
    }

	@Bean
    public JmsMessagingTemplate jmsMessageTemplate(){
        return new JmsMessagingTemplate(connectionFactory());
    }

}

这里我给大家讲解一下里面的代码,我们在整合mq的时候首先要在class上面添加一个@EnableJms注解,作用时让springboot知道我引入了一个activemq,然后让他交给spring去管理。然后@Configuration注解说明这个class文件是个配置类。
class里面的内容:第一个bean,我们创建一个activemq的连接工厂,然后连接到activemq;第二个bean,我们配置队列模式(点对点),第三个bean是配置主题模式(广播),第四个bean是我们配置activemq的发送模板
3.消费者

  @JmsListener(destination = "aa" ,containerFactory = "QueueListenerFactory")
    public void getaaData(Message message){
        TextMessage msg = (TextMessage) message;
        try {
         	..业务代码,如增删改查
            message.acknowledge();//收到确认
        } catch (JMSException e) {
            e.printStackTrace();
          
        }
     
    }

@JmsListener(destination = “接收消息的名称” ,containerFactory = “接收消息的工厂,队列或者主题的bean名(我们在配置文件中的第2,3个bean的名称)”)
4.生产者

 @Autowired
 JmsMessagingTemplate jmsMessageTemplate
 @RequestMapping
 public void send(){
 	jmsMessageTemplate.convertAndSend("队列名称","发送的消息");
 }

activemq在springboot中最基本的讲解接算完了,感谢你的观看!!!!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值