SpringBoot整合ActiveMQ:实现发布-订阅_springboot 整合activemq 发布/订阅-程序员宅基地

技术标签: spring boot  activemq  

ActiveMQ 发布-订阅

基础

  1. 引入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>

<dependency>
    <groupId>org.messaginghub</groupId>
    <artifactId>pooled-jms</artifactId>
</dependency>
  1. 基础配置
#ActiveMQ
##基本配置
spring.activemq.broker-url=tcp://192.168.1.122:61616
spring.activemq.user=admin
spring.activemq.password=admin
## 集群配置
#spring.activemq.broker-url=failover:(tcp://192.168.1.122:61616,tcp://192.168.1.122:61617)
## 线程池配置
spring.activemq.pool.enabled=true
spring.activemq.pool.max-connections=50
## 开启支持发布订阅模式,默认是点对点模式
spring.jms.pub-sub-domain=true

发布

  1. 定义Topic
@Bean
Topic topic() {

    return new ActiveMQTopic("news.topic");
}
  1. 发布服务
import javax.jms.Destination;
/**
 *  @title 新闻发布
 *  @Desc
 *  @author <a href="mailto:[email protected]">avaos.wei</a>
 *  @Date 2020-03-27 16:52
 *
 */
public interface NewsProducerService {

    /**
     * @title 发布消息
     * @desc  描述
     * @param msg: 待发布的内容
     * @return
     * @author <a href="mailto:[email protected]">avaos.wei</a>
     * @date 2020-03-27 16:52
     */
    void publish(String msg);

}
import cn.avaos.service.NewsProducerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Service;

import javax.jms.Topic;

@Service
public class NewsProducerServiceImpl implements NewsProducerService {

    @Autowired
    private JmsMessagingTemplate jmsTemplate;

    @Autowired
    private Topic topic;

    @Override
    public void publish(String msg) {
        jmsTemplate.convertAndSend(topic, msg);
    }
}
  1. 对外API
import cn.avaos.service.NewsProducerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
@RequestMapping("/api/news")
public class NewsController {

    @Autowired
    private NewsProducerService newsProducerService;

    @GetMapping
    public Object produce(String msg) {
        newsProducerService.publish(msg);

        log.info("produce: 发布消息-{}", msg);

        return "success";
    }
}

订阅

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

@Slf4j
@Component
public class TopicConsumer {

    @JmsListener(destination = "news.topic")
    public void receive1(String msg) {
        log.info("{} 接收到消息: {}", "1号", msg);
    }

    @JmsListener(destination = "news.topic")
    public void receive2(String msg) {
        log.info("{} 接收到消息: {}", "2号", msg);
    }

    @JmsListener(destination = "news.topic")
    public void receive3(String msg) {
        log.info("{} 接收到消息: {}", "3号", msg);
    }

    @JmsListener(destination = "news.topic")
    public void receive4(String msg) {
        log.info("{} 接收到消息: {}", "4号", msg);
    }

}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_46461896/article/details/105145932

智能推荐

Unity XR Interaction Toolkit 组件解析(一)Action-based 和 Device-based 的区别_device-based版-程序员宅基地

文章浏览阅读3.2k次,点赞10次,收藏19次。XR Input Subsystem 使用起来更加简单,但是动作与设备按键的绑定是无法修改的,Input System 可以自由配置动作和按键的映射关系,灵活性更高。而 Device-based 对应的是 XR Input Subsystem,Action-based 对应的是 Input System _device-based版

mapper实现数据表合并,取消mapreducer的处理,这里解决了mapper中new File找不到路径,no pointer空指针问题_mapper中如何合并查询2个表数据-程序员宅基地

文章浏览阅读247次。这里遇到一个路径找不到的问题,源码中mapper的file路径原本是指定driver的路径的,但是如果这里指定文件名,distributed cache是找不到的,需要我们将file的path改为完整路径,不要加file:/_mapper中如何合并查询2个表数据

帝国仿酷酷游戏网源码、可运营的手游综合门户网站模板PHP完整源码-程序员宅基地

文章浏览阅读422次,点赞8次,收藏6次。帝国CMS7.5仿《酷酷游戏网》源码,帝国CMS手游综合门户网站模板,外观大气漂亮的手机游戏下载平台,一站式手游门户网站模板,让你尽情畅玩手机游戏,获取最新游戏资讯和礼包福利。开测专区、专题推荐,让你第一时间体验最新游戏内容。帝国CMS7.5,打造专属你的手机游戏乐园!_酷酷游戏网源码

Python3 配置虚拟环境virtualenv_"virtualenvwrapper_pytho=\"$(command \\which pytho-程序员宅基地

文章浏览阅读1.3k次。1、安装virtualenvpip install virtualenv virtualenvwrapper2、配置文件修改~/.bash_profile或其它环境变量相关文件(如 .bashrc 或用 ZSH 之后的 .zshrc),添加以下语句:export WORKON_HOME=$HOME/.virtualenvsexport PROJECT_HOME=$HOME/_"virtualenvwrapper_pytho=\"$(command \\which python3)"

python ip反查域名_python 知道ip求域名-程序员宅基地

文章浏览阅读4.3k次。__author__ = 'niexinming'# -*- coding: utf-8 -*-import osfor i in range(0,255): comm="nslookup 10.1.89."+str(i) resul= os.popen(comm) resulstr=resul.read() if resulstr.find('NXDOMAI_python 知道ip求域名

2020 MIT6.S081 Lab环境搭建_6.s081 2020 环境-程序员宅基地

文章浏览阅读2.3k次,点赞3次,收藏4次。2020 MIT6.S081 Lab环境搭建_6.s081 2020 环境

随便推点

hutool工具的简单使用_hutool工具使用-程序员宅基地

文章浏览阅读895次,点赞23次,收藏20次。hutool工具的简单使用_hutool工具使用

输入一个字符串,判断它的所有字符中否全部是大写字母,如不是,统计小写字母个数,并将其转换成大写字母后输出_第3题 统计字符个数 查看测评数据信息 输入一个字符串,判断其中各不相同的大写字-程序员宅基地

文章浏览阅读1.1k次。import java.util.Scanner;public class CheckInput { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String string = scanner.nextLine(); char str[] = stri..._第3题 统计字符个数 查看测评数据信息 输入一个字符串,判断其中各不相同的大写字

oracle ebs 业务会计分录详释-程序员宅基地

文章浏览阅读7.8k次。oracle ebs 业务会计分录详释,以下来自百度文库,希望对大家理解oracle ebs财务模块会计分录有帮助: (一) 大宗商品采购 业务操作会计分录的生成模块会计分录填制请购单 填制采购订单 采购订单接收采购模块DR:商品采购 CR:应付账款-应计负债

驼峰式命名法-程序员宅基地

文章浏览阅读2.9k次,点赞16次,收藏16次。学Java的时候,基础是很重要的,从基础的地方开始对自己严格就是对自己最好的帮助, 就比如以后工作的时候基本上都是要遵守一个驼峰命名规则,这个不仅仅是工作需要, 也是对自己养成一个习惯的一部分,就比如命名一个变量:int username;int userName;int Username;int UserName; 就一个变量就可以有4种命名方式,这样就不能很好的分清楚你所需要的变量,给别人看的时候也不容易懂。这个时候驼峰命名规则就站了出来,统一一下命名规范。..._驼峰式

解决跨域问题的几个方法_本地部署端口不同 跨域-程序员宅基地

文章浏览阅读803次。解决跨域的方法_本地部署端口不同 跨域

@Service interfaceClass() or interfaceName()_@service interfaceclass() or interfacename() or in-程序员宅基地

文章浏览阅读6.6k次。问题项目启动的时候失败一直报有接口需要实现2020-02-15 21:29:07.179 [main] ERROR org.springframework.boot.SpringApplication 842 - Application run failedjava.lang.IllegalArgumentException: @Service interfaceClass() or int..._@service interfaceclass() or interfacename() or interface class must be pres