作者:追梦1819

原文:https://www.cnblogs.com/yanfei1819/p/11190048.html

版权声明:本文为博主原创文章,转载请附上博文链接!

引言

  前一章节中,我们详细阐述了 ActiveMQ 的安装和使用。其实在网站发展壮大的过程中,消息中间件是无法忽视的技术框架,其重要性在前一章也作了详细的说明。如此重要的技术,SpringBoot 生态圈自然也是不会"放过"的了,必然要集成到它的体系中去。

  本章将阐述 SpringBoot 整合 ActiveMQ。

使用

首先创建项目,引入 maven 依赖:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<!-- 该启动器是后面做测试用,非必须的 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

第二步,配置相关信息:

spring.activemq.broker-url=tcp://xxx:61616
spring.activemq.in-memory=true
spring.activemq.pool.enabled=false

第三步,创建消息生产者:

package com.yanfei1819.activemq.producer;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Component;
import javax.jms.Destination; /**
* Created by 追梦1819 on 2019-06-26.
*/
@Component
public class Producer {
@Autowired
private JmsMessagingTemplate template;
public void sendMessage(Destination destination, String message){
template.convertAndSend(destination,message);
}
}

第四步,创建消息消费者:

package com.yanfei1819.activemq.consumer;

import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Service; /**
* Created by 追梦1819 on 2019-06-26.
*/
@Service
public class Consumer {
@JmsListener(destination = "active.queue")
public void receive(String text) {
System.out.println("consumer接收到的报文为:" + text);
}
}

最后,创建测试接口:

package com.yanfei1819.activemq.web.controller;

import com.yanfei1819.activemq.producer.Producer;
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import javax.jms.Destination; /**
* Created by 追梦1819 on 2019-06-26.
*/
@Controller
public class ActivemqController { @Autowired
private Producer producer; @ResponseBody
@RequestMapping("/test")
public void test(){
Destination destination=new ActiveMQQueue("active.queue");
for (int i = 0; i <50 ; i++) {
producer.sendMessage(destination,"我是追梦1819,我的微信公众号是 technology-and-life ");
}
}
}

对以上代码作一个简单的说明:

  1. 为了简化模型来说明 SpringBoot 中 Activemq 的使用,以上的消息生产者和消息消费者都只做了最简单的模拟,没有任何逻辑;
  2. 以上的测试使用接口进行测试(作者比较喜欢这种方式),不局限这种方式,读者可以用单元测试。

启动项目,先看看 ActiveMQ 界面:

可以看到生产出来的消息,已经被注入到 ActiveMQ 中去了。

然后再访问以上测试接口:http://localhost:8080/test,再看 ActiveMQ 界面:

生产者生产的消息,被消费者消费。

控制台的信息是:

  以上演示了 ActiveMQ 在 SpringBoot 项目中的使用。其余的一些详细的测试,读者可以按照前一章 ActiveMQ 的说明,自行测试。此处由于篇幅所限,就不做冗余阐述。

总结

  看完以上的示例,读者应该能继续感受到 SpringBoot 框架的"开箱即用"的特性和极简模式。关注几个注解或者几个组件,就能用的很顺畅。

  但是,还是重复那句,框架的封装度越高,用起来越简单,但是对底层的原理的理解越难。如果碰到了问题,也更难追踪。所以作者建议读者,特别是新人或者刚接触 SpringBoot 的读者,一定要在使用的基础上,去理解每一个被整合的框架的使用和原理(当然,如果基础好,能够读底层源码更好了)。万不可为了使用而使用。就像一个同事说的,如果哪一天 Spring 生态圈被别的框架取代了,那你就失业了。

  忧患意识一定要保持着。

![](https://img2018.cnblogs.com/blog/1183871/201907/1183871-20190715170856893-614409026.png)

SpringBoot第二十一篇:整合ActiveMQ的更多相关文章

  1. Python开发【第二十一篇】:Web框架之Django【基础】

    Python开发[第二十一篇]:Web框架之Django[基础]   猛击这里:http://www.cnblogs.com/wupeiqi/articles/5237704.html Python之 ...

  2. SpringBoot第二十三篇:安全性之Spring Security

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/11350255.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言   系统的安全 ...

  3. SpringBoot第二十篇:初识ActiveMQ

    本文是作者之前写的关于 ActiveMQ 的一篇文章.此处为了保证该系列文章的完整性,故此处重新引入. 一.消息中间件的介绍 介绍 消息队列 是指利用 高效可靠 的 消息传递机制 进行与平台无关的 数 ...

  4. SpringBoot非官方教程 | 第二十一篇: springboot集成JMS

    转载请标明出处: http://blog.csdn.net/forezp/article/details/71024024 本文出自方志朋的博客 springboot对JMS提供了很好的支持,对其做了 ...

  5. Python之路【第二十一篇】:JS基础

    JavaScript的基础学习(一) 一.JavaScript概述 1.1 JavaScript的历史 ● 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在 ...

  6. Python之路【第二十一篇】Django ORM详解

    ORM回顾 关系对象映射(Object Relational Mapping,简称ORM). django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表. 对于ORM框 ...

  7. SpringBoot第十一篇:SpringBoot+MyBatis+Thymelaf实现CRUD

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10936304.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言   总结前面几 ...

  8. Python之路(第二十一篇) re模块

    一.re模块 正则表达式本身是一种小型的.高度专业化的编程语言,正则表达式就是字符串的匹配规则,在多数编程语言里都有相应的支持,python里对应的模块是re,正则表达式模式被编译成一系列的字节码,然 ...

  9. 【Python之路】第二十一篇--Memcached、Redis

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

随机推荐

  1. Marker

    # 样例 <?xml version="1.0" encoding="UTF-8"?> <Configuration status=" ...

  2. Spring Web Flow 的优缺点

    # 前言 Spring Web Flow = SWF 最近学习了<Spring实战>的第八章,Spring Web Flow.感觉是个不错的东西.无奈发现网上的资料少之又少.后来发现根本没 ...

  3. c# Ajax后台动态分页

    创建WebPager类 public static class WebPager { public static string WebPagerAjax(string Idn, bool IsShor ...

  4. sql server 定时备份数据库

    CREATE PROCEDURE [dbo].[SP_DBBackup_EveryNight_Local] @cycle INT, ---保存周期 @IsLocal INT, ---是否为本地 0表示 ...

  5. seajs教程(一):基本用法

    介绍 SeaJS 是一个适用于 Web 浏览器端的模块加载器.使用 SeaJS,可以更好地组织 JavaScript 代码. Sea.js 遵循 CMD 规范,模块化JS代码.依赖的自动加载.配置的简 ...

  6. DevExpress的xtraMessageBox汉化

    原文:DevExpress的xtraMessageBox汉化 项目使用的界面库是DevExpress 相当好用,不过里面弹出对话框XtraMessageBox的按钮都是英文的, 可能会对用户造成困扰, ...

  7. VS下对Resx资源文件的操作

    原文:VS下对Resx资源文件的操作 读取 using System.IO; using System.Resources; using System.Collections; using Syste ...

  8. 微信小程序把玩(二十五)loading组件

    原文:微信小程序把玩(二十五)loading组件 loading通常使用在请求网络数据时的一种方式,通过hidden属性设置显示与否 主要属性: wxml <!----> <butt ...

  9. 利用ZoomPipeline迅速实现基于线程池的全异步TCP点对点代理

    在博文<一种基于Qt的可伸缩的全异步C/S架构服务器实现>中提到的高度模块化的类可以进行任意拆解,实现非常灵活的功能.今天,我们来看一看一个公司局域网访问英特网云服务器的点对点代理例子.代 ...

  10. no identifier specified for entity错误

    未给entity类添加主键造成. 之前出现这个错误是因为忘记给id添加@Id标签.