spring boot 二十四 (ActiveMQ 二 )集成 spring boot

ActiveMQ 主要有两种模式:
1、点对点(Point-to-Potin) : 消息队列模式
2、发布/订阅 (Publish/Subcribe):广播模式

消息接收又分为两种
1、同步接收消息 : 接收者阻塞式的,会有一个线程一直等待接收消息。
2、异步接收消息:监听者模式,有消息时被调用,没消息时,线程会处理别的业务。

集成 spring boot 有两种方式。一种完全注解,一种基于config 配置。

点对点模式(同步阻塞式):

第一步 加入依赖
第二步 编写配置
第三步 编写代码。
环境 idea maven
第一步 加入依赖

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

第二步 编写properties

#active 服务连接地址
spring.activemq.broker-url=tcp://localhost:61616

# 集群模式(只需要使用 failover:(xxxx:xx) 方式)
#spring.activemq.broker-url=failover:(tcp://localhost-0:61616,tcp://localhost-1:61616,tcp://localhost-2:61616)

#集群模式 只需要换成下面的链接就行
#spring.activemq.broker-url=tcp://localhost:61616

#配置服务中心 目标地址
spring.jms.template.default-destination=testMessage

#如果在  activemq.xml 中配置了用户名密码就需要用户名密码访问
#spring.activemq.user=username
#spring.activemq.password=password

用户名密码的配置方式看上一章 最后面的位置
第三步 编写代码。(controller 只需要调用就行,这里就不沾出来了)

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Service;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;

/**
 * @Author: zll
 * @Date @{DATE} 14:54
 */
@Service
public class TestService {

    @Autowired
    JmsTemplate jmsTemplate;

    public void sendMessage() {
        jmsTemplate.send(new MessageCreator() {
            @Override
            public Message createMessage(Session session) throws JMSException {
                return session.createTextMessage("hello ActiveMQ~~!");
            }
        });
    }

    //同步阻塞式  接收消息
    public String getMessage(){
        Message message = jmsTemplate.receive();
        String text = "没有收到消息";
        if(message instanceof TextMessage){
            try {
                text = ((TextMessage) message).getText();
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
        return text;
    }
}

调用测试一下。
先发送: http://localhost:8080/send
在接收: http://localhost:8080/get

发布订阅模式:

在上面的代码基础上改一个配置就可以完成:
spring.jms.pub-sub-domain=true (模式是false)

#active 服务连接地址
spring.activemq.broker-url=tcp://localhost:61616

#配置服务中心 目标地址
spring.jms.template.default-destination=testMessage

#如果在  activemq.xml 中配置了用户名密码就需要用户名密码访问
#spring.activemq.user=username
#spring.activemq.password=password

#true 为 发布订阅模式   false 为点对点模式。 默认是 false。 
spring.jms.pub-sub-domain=true

异步模式

在上面的代码基础上 ,只是修改接收端代码

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Service;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;

/**
 * @Author: zll
 * @Date @{DATE} 14:54
 */
@Service
public class TestService {

    @Autowired
    JmsTemplate jmsTemplate;

    public void sendMessage() {
        jmsTemplate.send(new MessageCreator() {
            @Override
            public Message createMessage(Session session) throws JMSException {
                return session.createTextMessage("hello ActiveMQ~~!");
            }
        });
    }

    //异步模式  ( 这里于上面的方式不是 需要使用 JmsListener)
        //concurrency 表示开启一个监听者来处理 接收,
    // 在点对点模式(队列模式)中可以加快处理速度,没有监听者会循环取出队列中的消息,
    // 广播模式(发布订阅)就会导致4个接收到一样的消息处理。
    @JmsListener(destination = "${spring.jms.template.default-destination}",concurrency = "4")
    public void getAsynMessage(Message message){
        String text = "没有收到消息";
        if(message instanceof TextMessage){
            try {
                text = ((TextMessage) message).getText();
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
        System.out.println("最新消息:"+text);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值