spring boot集成activemq(windows)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

1.环境配置

2.说明

3.服务启动

4.示例

导入依赖

配置文件

service层

配置类

监听器

5.总结


1.环境配置

安装解压缩即可
注意每个版本对应的java版本不一样需要根据服务器的java版本来下载对应的mq的版本

在conf文件的路径下有个activemq.xml的配置文件文件中的这个地址需要修改一下改成127.0.0.1这样安全性更高。端口号有冲突的也需要修改一下或者kill掉占用的端口号。

2.说明

JMS Java Message Service :一个规范等同于 JDBC 规范提供了与消息服务相关的 API 接口
JMS 消息模型
peer-2-peer 点对点模型 消息发送 到一个 队列中 队列 保存消息。队列 的消息只能被一个消费者 消费或超时
pub lish- sub scribe 发布 订阅模型消息可以被多个消费者消费生产者和消费者完全独立不需要感知对方的 存在
ActiveMQ属于JMS类型的消息队列

3.服务启动

进入到安装目录下这是我的安装目录点击启动脚本完成启动。
D:\queue\apache-activemq-5.16.5\bin\win64

启动成功的场合

 可以通过 http://127.0.0.1:8161/进行到消息队列的管理界面用户名和密码都是admin。

进入之后能够看到相应的队列信息。

 queues代表点对点模式发送的消息可以看到消费者信息消息的信息。

topics代表发布订阅模式发送的消息也可以看到消费者的信息消息的信息。

4.示例

导入依赖

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

配置文件

spring:
  activemq:
    broker-url: 127.0.0.1:61616
  jms:
    pub-sub-domain: true
    template:
      default-destination: orderInfoamation

 jms的配置主要是设置消息的类型是点对点还是发布订阅模式默认是点对点模式将pub-sub-domain设置为true则表示是发布订阅模式

default-destination表示设置一个默认的名字用来存放消息一般不用指定可以在代码中进行设置

service层

package com.example.demo.activemq.impl;

import com.example.demo.activemq.ActivemqService;
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;

/**
 * @author linaibo
 * @version 1.0
 * Create by 2023/1/16 13:55
 */
@Service
public class ActivemqServiceImpl implements ActivemqService {

    @Autowired
    private JmsMessagingTemplate messagingTemplate;

    @Override
    public void sendMessage(String msg) {
        System.out.println("activemq发送topic消息"+msg);
        ActiveMQTopic topic_test = new ActiveMQTopic("topic_test");
        messagingTemplate.convertAndSend(topic_test,msg);

        System.out.println("activemq发送queue消息"+msg);
        ActiveMQQueue queue_test = new ActiveMQQueue("queue_test");
        messagingTemplate.convertAndSend(queue_test,msg);
    }
}

注入JmsMessagingTemplate对象之后创建对应的发布消息的模式进行消息的发布

配置类

package com.example.demo.activemq.config;


import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Component;

import javax.jms.ConnectionFactory;

/**
 * @author linaibo
 * @version 1.0
 * Create by 2023/1/16 14:46
 */
@Component
public class activemqConfig {
    @Bean
    ConnectionFactory connectionFactory() {
        return new ActiveMQConnectionFactory();
    }

    @Bean
    JmsTemplate jmsTemplate(ConnectionFactory connectionFactory) {
        JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
        jmsTemplate.setPriority(999);
        return jmsTemplate;
    }

    @Bean(value="jmsMessagingTemplate")
    JmsMessagingTemplate jmsMessagingTemplate(JmsTemplate jmsTemplate) {
        JmsMessagingTemplate messagingTemplate = new JmsMessagingTemplate(jmsTemplate);
        return messagingTemplate;
    }

    @Bean(name="queueListenerContainerFactory")
    public JmsListenerContainerFactory queueListenerContailerFactory(ConnectionFactory connectionFactory){
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setPubSubDomain(false);
        return factory;
    }
    @Bean(name="topicListenerContainerFactory")
    public JmsListenerContainerFactory topicListenerContainerFactory(ConnectionFactory connectionFactory){
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setPubSubDomain(true);
        return factory;
    }
}

配置类中设置JmsMessagingTemplate以及队列和主题这两种消息模式。

监听器

package com.example.demo.activemq.listener;

import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

/**
 * @author linaibo
 * @version 1.0
 * Create by 2023/1/16 13:58
 */
@Component
public class ActivemqListener {

    @JmsListener(destination = "topic_test",containerFactory = "topicListenerContainerFactory")
    public void reciveTopic1(String msg) {
        System.out.println("接收到active的topic消息1:" + msg);
    }

    @JmsListener(destination = "topic_test",containerFactory = "topicListenerContainerFactory")
    public void reciveTopic2(String msg) {
        System.out.println("接收到active的topic消息2:" + msg);
    }

    @JmsListener(destination = "queue_test",containerFactory = "queueListenerContainerFactory")
    public void reciveQueue(String msg) {
        System.out.println("接收到active的queue消息:" + msg);
    }
}

监听器中要对destination及 containerFactory进行设置通过消息名称和模式来进行监听。点对点模式只有一个消费者能够消费消息而发布订阅模式有多个消费者可以消费这一条消息。

5.总结

按照上面这种方式来进行消息的发布可以进行点对点或者发布订阅模式的消息发送如果在配置文件中指定了点对点或者发布订阅模式的时候只能进行一种消息的发送。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: windowsSpring