springboot activemq

SpringBoot整合ActiveMQ ActiveMQ是MQ产品中的元老级产品,早期标准MQ产品之一,在AMQ协议没有出现之前,占据了消息中间件市场的绝大部分份额,后期因为AMQP系列产品的出现迅速跌落,目前仅在一些线上运行的产品中出现,新产品开发较少使用。这些都是规范,就像JDBC技术,是个规范,开发针对规范开发,运行还有靠实现类,例如MySQL提供了JDBC的实现,最终运行靠的还是实现,并且这三类规范都是针对异步消息进行处理的。​ 以上这种分类是从消息的生产和消费过程来区分,针对消息所包含的信息不同,还可以进行不同类别的划分。 阅读详情

1.Factory配置Bean,包含Queue和Topic两种Factory。主要是设置PubSubDomain字段的设置(bean.setPubSubDomain(true))

JmsConfiguration.java

package com.thinvent.service;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;
import org.springframework.jms.support.converter.MappingJackson2MessageConverter;
import org.springframework.jms.support.converter.MessageConverter;
import org.springframework.jms.support.converter.MessageType;

import javax.jms.ConnectionFactory;

/**
 * Created by GongWenHua on 2017/10/20.
 */
@Configuration
@EnableJms
public class JmsConfiguration {
    /**
     * topic模式的ListenerContainer
     * @param activeMQConnectionFactory
     * @return
     */
    @Bean
    public JmsListenerContainerFactory<?> jmsListenerContainerTopic(ConnectionFactory activeMQConnectionFactory) {
        DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
        bean.setPubSubDomain(true);
        bean.setConnectionFactory(activeMQConnectionFactory);
        /**
         * 使用消息转换器
         */
        bean.setMessageConverter(jacksonJmsMessageConverter());
        return bean;
    }
    /**
     * queue模式的ListenerContainer
     * @param activeMQConnectionFactory
     * @return
     */
    @Bean
    public JmsListenerContainerFactory<?> jmsListenerContainerQueue(ConnectionFactory activeMQConnectionFactory) {
        DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
        bean.setConnectionFactory(activeMQConnectionFactory);
        /**
         * 使用消息转换器
         */
        bean.setMessageConverter(jacksonJmsMessageConverter());
        return bean;
    }
    /**
     * 消息转换器
     * @return
     */
    @Bean
    public MessageConverter jacksonJmsMessageConverter() {
        MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
        converter.setTargetType(MessageType.TEXT);
        converter.setTypeIdPropertyName("_type");
        return converter;
    }
}

2.创建消息生产者,一个提交任意对象到Queue,一个提交任意对象到Topic,一般有这两种就够了。(个人之见)
MQProviderService.java

package com.thinvent.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

/**
 * Created by GongWenHua on 2017/10/20.
 */
@Component
public class MQProviderService {
    @Autowired
    private JmsTemplate jmsTemplate;
    public void send2Queue(String domainName,final Object  message){
        if(jmsTemplate.isPubSubDomain()){
            jmsTemplate.setPubSubDomain(false);
        }
        if(StringUtils.isEmpty(domainName)){
            jmsTemplate.convertAndSend(message);
        }else {
            jmsTemplate.convertAndSend(domainName,message);
        }
    }

    public void send2Topic(String domainName,final Object  message){
        if(!jmsTemplate.isPubSubDomain()){
            jmsTemplate.setPubSubDomain(true);
        }
        if(StringUtils.isEmpty(domainName)){
            jmsTemplate.convertAndSend(message);
        }else {
            jmsTemplate.convertAndSend(domainName,message);
        }
    }
}

3.创建要发送的两个自定义消息类
Message.java

package com.thinvent.pojo;

import lombok.Data;

import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by GongWenHua on 2017/10/20.
 */
@Data
public class Message implements Serializable {
        // 序列化
        private static final long serialVersionUID = 1L;
        // 消息内容
        private Map<String,Object> alarm_event_mes;
        // 消息标题
        private String alarm_event_title;
        // 消息类型ID
        private Integer alarm_type_id;
        // 动作ID
        private String alarm_action_code;
        // 消息备注
        private String remark;

        public void add(String key,Object value){
            alarm_event_mes.put(key,value);
        }
        public Object get(String key){
            return alarm_event_mes.get(key);
        }

        public Message(){
            create_time = new Date();
            alarm_event_mes = new HashMap<>();
        }
}

ThirdMessage.java

package com.thinvent.pojo;

import lombok.Data;

import java.io.Serializable;

/**
 * Created by GongWenHua on 2017/10/20.
 */
@Data
public class ThirdMessage implements Serializable {
    private static final long serialVersionUID = 1L;
    String id;
    String type;
    Integer level;
}

4.针对两种消息分别创建队列消息消费者和主题消息消费者.
MQConsumerService.java

package com.thinvent.service;

import com.thinvent.pojo.Message;
import com.thinvent.pojo.ThirdMessage;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Service;

/**
 * Created by GongWenHua on 2017/10/20.
 */
@Service
public class MQConsumerService {

    @JmsListener(destination = "portal.admin.topic",containerFactory = "jmsListenerContainerTopic") // 监听指定消息主题
    public void receiveTopic(Message message) {
        System.out.println("portal.admin.topic");
        System.out.println(message);
    }

    @JmsListener(destination = "portal.admin.topic2",containerFactory = "jmsListenerContainerTopic") // 监听指定消息主题
    public void receiveTopic(ThirdMessage message) {
        System.out.println("portal.admin.topic2");
        System.out.println(message);
    }


    @JmsListener(destination = "portal.admin.queue",containerFactory = "jmsListenerContainerQueue") // 监听指定消息队列
    public void receiveQueue(Message message) {
        System.out.println("portal.admin.queue");
        System.out.println(message);
    }

    @JmsListener(destination = "portal.admin.queue2",containerFactory = "jmsListenerContainerQueue") // 监听指定消息队列
    public void receiveQueue(ThirdMessage message) {
        System.out.println("portal.admin.queue2");
        System.out.println(message);
    }
}

5.编写controller进行测试

MQController.java

package com.thinvent.controller;

import com.thinvent.pojo.Message;
import com.thinvent.pojo.ThirdMessage;
import com.thinvent.service.MQProviderService;
import com.thinvent.util.ResultVOUtil;
import com.thinvent.vo.ResultVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.UUID;

/**
 * Created by GongWenHua on 2017/10/19.
 */
@RestController
public class MQController {

    @Autowired
    private MQProviderService mqProviderService;

    @GetMapping("/send/to/topic")
    public ResultVO sendToTopic() {
        Message message = new Message();
        message.setEquip_ip(UUID.randomUUID().toString());
        mqProviderService.send2Topic("portal.admin.topic",message);
        return ResultVOUtil.success("send ok");
    }
    @GetMapping("/send/to/queue")
    public ResultVO sendToQueue() {
        Message message = new Message();
        message.setEquip_ip(UUID.randomUUID().toString());
    mqProviderService.send2Queue("portal.admin.queue",message);
        return ResultVOUtil.success("send ok");
    }

    @GetMapping("/send/to/topic2")
    public ResultVO sendToTopic2() {
        ThirdMessage message = new ThirdMessage();
        message.setId(UUID.randomUUID().toString());
        mqProviderService.send2Topic("portal.admin.topic2",message);
        return ResultVOUtil.success("send ok");
    }

    @GetMapping("/send/to/queue2")
    public ResultVO sendToQueue2() {
        ThirdMessage message = new ThirdMessage();
        message.setId(UUID.randomUUID().toString());
        mqProviderService.send2Queue("portal.admin.queue2",message);
        return ResultVOUtil.success("send ok");
    }
}

6.测试结果
依次执行Controller中的方法。结果如下
Application.log

portal.admin.queue
Message(alarm_event_mes={}, alarm_event_title=null, alarm_type_id=null, alarm_action_code=null, alarm_action_name=null, create_time=Fri Oct 20 21:59:45 CST 2017, alarm_level_id=null, equip_ip=443c2f5b-2325-41e0-877c-87a09dc33c9b, remark=null)

portal.admin.queue2
ThirdMessage(id=e69cc7bb-b99e-44d2-9352-2170096c0236, type=null, level=null)

portal.admin.topic
Message(alarm_event_mes={}, alarm_event_title=null, alarm_type_id=null, alarm_action_code=null, alarm_action_name=null, create_time=Fri Oct 20 21:59:55 CST 2017, alarm_level_id=null, equip_ip=83d81e99-b7a6-4a11-90a1-973fa3493d29, remark=null)

portal.admin.topic2
ThirdMessage(id=d22a6fb7-0292-4f5a-9abc-c02be8d7306a, type=null, level=null)
activeMQ嵌入springboot项目 1导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> </dependency>... 阅读详情

相关推荐

全志 mipi屏幕和触摸驱动调试记录

mipi屏幕与触摸调试记录

u011996684的博客 3220

[CXF] Server与Client实现方式四:JMS

【参考:http://cxf.apache.org/docs/jms-transport.html】 【参考:http://cxf.apache.org/docs/using-the-jmsco...

cuihuang1302的博客 288

5步搞定ABB机器人RobotStudio与S7-1500PLC的Profinet通讯(附PLCSIM调试技巧)

本文详细介绍了如何利用RobotStudio与TIA Portal软件,结合PLCSIM Advanced仿真器,在零硬件条件下实现ABB机器人与西门子S7-1500 PLC之间的Profinet通讯虚拟调试。通过五个核心步骤,从环境搭建、网络配置、信号映射到联合仿真与高级调试,帮助工程师在项目前期高效验证逻辑、压缩现场调试周期,并掌握实用的PLCSIM调试技巧。

weixin_29188043的博客 505

Spring-boot教程(十三)使用整合JMS之ActiveMQ

此文cv自:https://blog.youkuaiyun.com/qq_33392133/article/details/78604402 自己还没实践,感觉用到的可能性不大,这里重在学习 手动配置第三方框架,学习@Configuration、@ConfigurationProperties、@PropertySource(value   由于springboot2.0对于activemq只提供了自动...

jcpp9527的博客 1513

利用 vivado实现加减法器的设计

本科计组实验:利用 vivado实现加减法器的设计

qq_52052302的博客 1万+

Jetson工业级应用指南:用Orin NX 16GB打造多摄像头AI质检系统

本文详细介绍了如何利用NVIDIA Jetson Orin NX 16GB构建高效的多摄像头AI质检系统,涵盖硬件选型、软件优化及产线部署全流程。通过100 TOPS的AI算力和多路视频处理能力,Orin NX在工业4.0时代展现出卓越的实时缺陷检测性能,特别适合嵌入式AI应用场景。

Pepper的专栏 308

JMS configuration guide

This page introduces how to create the JMS connection factory and queue in WPS 6.0.2. Login the WAS admin console with the administartor user name and password; [b]Step 1: Create a service bus "...

cindysaj的专栏 203

ClaudeCode入门01-环境安装(小白入门:手把手教你配置,超简单的一种接入方式)

文手把手教你从零搭建 Claude Code 开发环境。针对国内网络现状,我们采用 OpenRouter + Claude Code Router 的方案,支持支付宝/微信充值,无需科学上网即可完成配置。内容涵盖 Node.js 安装(macOS/Windows/Linux)、OpenRouter 注册与充值、Claude Code 和 Router 安装配置,以及一键启动脚本的编写。跟着截图一步步操作,10分钟搞定全部环境!

yueyeguzhuo的专栏 281

Springboot 整合 JMS

ActiveMQ JMS 仅支持 Java 平台。 由于 JMS 是一套标准,所以 SpringBoot 整合 JMS 必然是整合 JMS 的某一个实现。 Apache ActiveMQ 是一个开源的消息中间件,完全支持 JMS 1.1 规范,支持多种编程语言( C、C++、C#、Delphi、Erlang、AdobeFlash、Haskell,Java、Javascript、Perl、PHP、Pike、Python、Ruby )和协议 (OpenWire、REST、STOMP、WS-Notificatio

IT__learning的博客 2277

一周一个Unity小游戏2D反弹球游戏 - 球反弹的方向

本文将实现当球在球板上反弹时,会根据球板移动的方向来给球施加反弹的力,例如当球板往左移动时反弹球,则球应向左上方反弹,若球板往右移动时反弹球,则球应向右上方反弹。

Giver的博客 752

AI Agent开发第49课-DIFY让AI自动预约排班后发企业微信通知-MongoDb-Redis-企业微信调用

我们的Dify会讲得很透彻,坚持喂饭级教程,从一个基本的AI自动预约客户到自动记录客户的信息再到自动判断下一步如何走全部是AI化的,这是一个真正的AI原生应用,它来自于我的一个大型物业公司用AI自动预约系统中的一部分。我们会使用这个预约流做完整的Dify例子来讲完,因为它太有代表性了。工作流中的控制反转、AI决策下一步怎么走、人为干涉、用户行为判断、外部中间件如Redis,今天我们就要讲到在Dify中调用MongoDB的数据以及企业微信通知来作为预约派单的最后一步了。

打造全国最全的AI Agent开发知识领域的博客 1754

jms 自动接收确认_SpringBoot消息源码解析:JMS基础自动配置

SpringBoot消息源码解析Spring框架对消息系统的整合提供了广泛的支持:从简单使用 Jms Template 的 JMS API,到可接收异步消息的完整基础结构。Spring AMQP 为“高级消息队列协议”提供了类似的功能集。同时,Spring Boot 也为 RabbitTemplate 和 Rabbit MQ 提供了自动配置选项。Spring Boot通过自动配置对 ActiveM...

weixin_39822147的博客 661

华为OD机考双机位C卷 - 采购订单 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 采购订单 。提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 426

《SpringBoot篇》25.SpringBoot整合ActiveMQ

简介:在先学习整合之前先了解一下ActiaveMQ,ActiveMQ是早期MQ产品之一,是使用JAVA语言编写。大部分现在的项目可能已经不使用,但是公司中的产品咱也说不准,所以还是要学习一下的。简单来说就是用作服务间的通信。Apache ActiveMQ是最流行的开源、多协议、基于Java的消息代理。它支持行业标准协议,因此用户可以在广泛的语言和平台上获得客户端选择的好处。从用JavaScript、C、C++、Python、.Net等编写的客户端连接。使用无处不在的AMQP协议集成多平台应用程序。

陈老老老板的博客 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

SpringBoot 使用 ActiveMq

AtiveMq部署与springboot集成

空明的博客 6264

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【springboot】之整合ActiveMQ

1、引入依赖的jar登录后复制 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifact...

weixin_29650949的博客 660

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SpringBoot整合ActiveMq

SpringBoot整合ActiveMq 本文主要讲解SpringBoot整合ActiveMq,文末附源码地址

程序员小强的博客 7741

SpringBoot整合ActiveMQ大全

文章目录SpringBoot整合ActiveMQ背景知识点ActiceMQ相关概念PTP 和 PUB/SUB对比安全认证持久化SrpingBoot集成ActiveMQ SpringBoot整合ActiveMQ 背景知识点 JMS:Java Message Service Java消息服务 消息队列:消息的传输过程中保存消息的容器 消息队列主要特点:异步处理 主要目的:减少请求响应时间和解耦 使用场...

CallmeMaybe 3440

SpringBoot集成ActiveMQ

在实际项目中,很多时候需要消息中间件来进行分布式系统间的通信。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能。 ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

海锋博客 1万+

Springboot 中嵌入ActiveMQ

由于在项目中要用于MQ,但是如果独立安装一下MQ不太适合服务的迁移,因此决定采用内嵌的方式进行整全ACTIVEMQ 具体步骤如下: 1、在新建的SpringBoot项目中引下如下依赖

tianlong1569的专栏 1432

springboot camel mqtt activemq

前面写类一篇kafka的,这里就不说了 springboot版本 2.0.4.RELEASE maven &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-we...

0123456789 894

SpringBoot集成ActiveMQ实例详解

在项目开发的过程中我们经常会遇到类似的业务场景:用户申请提现,后台进行账务处理、发送提现短信、调用银行打款通道。 在这个过程中调用三方通道(短信或银行通道)都比较耗时,同时账务处理可能也是由专门的账务系统进行处理。那么,为了提高并发和相应速度,后面的三个操作都可以通过异步进行处理。这就用到了消息队列。 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题,实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件。 市面上比较常见的消息队列有:Act

罗马没假日 2万+
上一篇: logback 通用配置方案 颜色和结合application.yml
下一篇: springboot activemq 2 持久化消息 与 持久化订阅
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值