消息队列(一)ActiveMQ

1.ActiveMQ服务器搭建

1.1 linux环境搭建ActiveMQ服务器

在/usr下创建activemq文件,用于存放下载好的activemq压缩文件

mkdir /usr/activemq

在linux环境用wget命令下载apache-activemq-5.15.9-bin.tar.gz,官网地址点击这里

wget https://mirrors.tuna.tsinghua.edu.cn/apache//activemq/5.15.9/apache-activemq-5.15.9-bin.tar.gz

解压到当前文件

tar -zxvf apache-activemq-5.15.9-bin.tar.gz

启动ActiveMQ

cd /usr/activemq/apache-activemq-5.15.9/bin/
./activemq start

查看状态

./activemq status

在这里插入图片描述
在本地访问http://123.207.231.159:8161/出现以下界面表示成功,记住代码配置端口是61616,而activemq提供的UI访问端口是8161哈!
在这里插入图片描述

1.2 Windows环境搭建ActiveMQ服务器

在Windows下搭建ActiveMQ就简单了,先在官网下载Windows版activemq
在这里插入图片描述
解压到任意位置
在这里插入图片描述
进入C:\Users\Administrator\Desktop\apache-activemq-5.15.9\bin\win64下面直接双击activemq.bat文件出现下面终端界面访问localhost:8161看到ActiveMQ的 UI界面表示Windows搭建ActiveMQ服务器成功。
在这里插入图片描述
在这里插入图片描述

2.ActiveMQ整合springboot项目实战(PTP和Topic)

2.1ActiveMQ整合springboot项目

添加maven依赖

  <!-- activemq -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-pool</artifactId>
        </dependency>

在application.properties文件下添加配置

扫描二维码关注公众号,回复: 9051197 查看本文章
server.port=8988

spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin

# 等待时间
spring.activemq.close-timeout=3000
# 默认情况下activemq提供的是queue模式,若要使用topic模式需要添加如下配置
spring.jms.pub-sub-domain=true

写一个监听JMS的配置类

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;

import javax.jms.ConnectionFactory;

@Configuration
public class ActiveMqConfig {

    // queue模式的ListenerContainer
    @Bean
    public JmsListenerContainerFactory<?> jmsListenerContainerQueue(ConnectionFactory activeMQConnectionFactory) {
        DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
        bean.setConnectionFactory(activeMQConnectionFactory);
        return bean;
    }

    // topic模式的ListenerContainer
    @Bean
    public JmsListenerContainerFactory<?> jmsListenerContainerTopic(ConnectionFactory activeMQConnectionFactory) {
        DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
        bean.setPubSubDomain(true);
        bean.setConnectionFactory(activeMQConnectionFactory);
        return bean;
    }
}

消息发送者

import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Service;

@Service
public class JMSProducer {
    @Autowired
    private JmsMessagingTemplate jmsTemplate;

    /**
     *   PTP
     * @param queueName
     * @param message
     */
    public void send(String queueName, String message) {
        this.jmsTemplate.convertAndSend(new ActiveMQQueue(queueName), message);
    }

    /**
     *  Topic
     * @param queueName
     * @param message
     */
    public void sendtopic(String queueName, String message) {
        this.jmsTemplate.convertAndSend(new ActiveMQTopic(queueName), message);
    }

}

消息接收者

import lombok.extern.slf4j.Slf4j;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class JMSConsumer {

    /**
     * 就收QueueOne消息queue
     * @param mes
     */
    @JmsListener(destination = "QueueOne", containerFactory = "jmsListenerContainerQueue")
    public void resive(String mes){
        log.info("收到消息{},完成!",mes);
    }

    /**
     * 接收TopicOne消息topic
     * @param mes
     */
    @JmsListener(destination = "TopicOne", containerFactory = "jmsListenerContainerTopic")
    public void resivetopic(String mes){
        log.info("收到消息{},完成!",mes);
    }

}

2.2测试

写一个控制器用于测试

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DoEveryting {

    @Autowired
    private JMSProducer mqProducer;

    @GetMapping("/domq")
    public void doJms() {
        mqProducer.send("QueueOne", "来自one");
    }

    @GetMapping("/dotopic")
    public void doJmstopic() {
        mqProducer.sendtopic("TopicOne", "来自TopicOne");
    }

}

本地访问 localhost:8988/domq控制台打印消息证明成功
在这里插入图片描述
其中topic的测试需要用两个应用测试。我这里只给大家展示了一个应用。

发布了55 篇原创文章 · 获赞 23 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Z_Vivian/article/details/90697611