SpringBoot日记——MQ消息队列整合(一)
除了之前讲到的缓存,我们还会用到消息队列来存储一些消息,为了提升系统的异步性能等等;
消息服务有两个概念需要知道:消息代理-message broker,目的地-destination。消息发送由代理接管并传递到指定目的地:
—— 消息只有唯一的发送和接受者,消息从队列中取出就不在了。
目的地有两种形式:queue-点对点的消息队列、topic-发布(publish)和订阅(subscribe)的消息通信主题;
—— 发送一个消息主题,多个订阅者通过监听得知消息的发布并取得;0
我要介绍的以AMQP协议的RabbitMQ为例:
RabbitMQ
一、基本概念及结构关系:
Message-消息,它是由几个属性组成的,具备消息头和消息体;
Publish-消息生产者,向交换器发布消息的一个应用程序;
Exchange-交换器,接收消息,并把消息路由给服务器中的队列,属于分配的角色; Exchange有四种类型:direct、fanout、topic和headers。这四种转发消息的策略有区别:
Queue-消息队列,保存消息的容器,一个Broker中可以有多个消息队列;
Binding-绑定,将Exchange和Queue绑定;
Connection-网络连接,比如Tcp连接;
Channel-信道,建立在TCP连接中的虚拟的,双向数据流通道;AMQP命令就是通过信道将消息发送、发布、订阅和接收的;
Consumer-消息接收者,也叫消息的消费者,用来接收和获取消息的一端应用;
Virtual Host-虚拟主机,每个虚拟主机相对独立,相当于一个独立的mini的RabbitMQ服务器,默认是“/”;
Broker-消息队列服务器实体;
这些基本概念的关系如图:(不细说)

二、运行机制:
Exchange我们上边介绍了,有4种策略类型,其中header是对消息中的header进行匹配的,使用相对少。下边主要介绍另外三种都是匹配路由键(routing key)的:
direct:以单播的模式,如果发送的路由键和我们绑定的key一致,那么就发送到该队列中。比如我们发送aaa,那么就只有介绍aaa的Queue的key才会接收和取走这条消息,即完全匹配、1v1收发;
fanout:广播模式发送消息到每一个消息队列中,无论路由键是什么。比如我们发送aaa,那么无论有多少个消息队列,我们都发;
topic:将我们发出的消息,按照匹配规则模糊的来收发。比如,我们发送aaa.bb,那么我们就发送到aaa.#和*.bb中,而不会发送到其他比如ccc.#的消息队列中;
(*匹配一个单词,#匹配0或多个单词-比如aa.bb.cc)
RabbitMQ的安装测试
这里介绍两种安装和启用的方法:(windows和docker)
1.windows环境下的安装和使用:
1)、在windows环境下,我们需要先依赖一个ErLang的语言开发包,下载地址:http://www.erlang.org/downloads,根据你的系统选择32或64位版本的安装

然后配置一下环境变量:
ERLANG_HOME = C:\Program Files\er21.0 (你的安装目录)
Path 中加入 %ERLANG_HOME%\bin;
测一下是否安装成功,如下图,OK(输入:erl)

2)、下载和安装RabbitMQ,下载地址:http://www.rabbitmq.com/download.html ,选择windows版本

同样安装和配置环境变量:
RABBITMQ_SERVER = C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.1 (安装目录)
在path中加入:%RABBITMQ_SERVER%\sbin;
然后安装插件-用来实现界面管理的,在命令行中输入: rabbitmq-plugins.bat enable rabbitmq_management (图片是网上扒的,不要在意细节~)

启动MQ服务,为了防止异常情况,我们这里要求使用管理员模式的命令行窗口输入:
net stop RabbitMQ && net start RabbitMQ
如果想停止服务:rabbitmq-service stop
2.docker下的安装和使用:
1)、首先链接服务器,然后检查镜像,如果没有MQ的,我们去官方hub网站查看一下,我们选择标签中带有management的进行下载,这个是带有web管理界面的;
在服务器中键入该命令进行下载:
docker pull registry.docker-cn.com/library/rabbitmq:3-management

这样,镜像就安装好了。那么我们来启动这个mq服务:(mq默认端口就是这两个)
docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq df0ee1f2343b

使用RabbitMQ的web管理界面
使用上边的方法,我们成功的安装和启动了MQ服务,那么我们来使用web管理界面来检查下,是否可以使用吧。
在浏览器的地址栏输入(默认账户密码是guest/guest,有需要自己再添加设置)
ip:15672
如果是windows本地搭建:localhost:15672
如果是docker搭建的:xx.xx.xx.xx:15672 ip是服务器地址,可以通过ip addr查看你服务器的ip地址

登录以后,可以看到我们之前讲的那些字段,然后添加我们需要的东西就可以了,下边不具体介绍,几个图自己领会一下吧~
步骤:添加Exchange、添加Queue、进入Exchange绑定Queue、在Exchange内发送消息、到Queue中获取该消息






这里单独说一下关于topic键的输入,按照之前说过的规则来写:

将RabbitMQ整合到SpringBoot中
web客户端我们应该有一些了解了,那如何在代码中应用呢?先来看如何做关联,很简单,在pom.xml中加入这一段:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
1)、关于使用,这里其实跟redis缓存一样,我们使用注解:
@EnableRabbit //使用rabbitMQ的注解
@RabbitListener //监听rabbitMQ消息
同样,为了得到的数据是json格式的,我们直接自己自定义一个类:
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; @Configuration
@EnableRabbit //启动rabbit注解
public class MyAMQPConfig {
// 将消息以json格式传递
@Bean
public MessageConverter messageConverter() {
return new Jackson2JsonMessageConverter();
}
}
来测试一下,我们添加的MQ是否可用吧:……有点长,换下一篇文章=。=b
SpringBoot日记——MQ消息队列整合(一)的更多相关文章
- SpringBoot日记——MQ消息队列整合(二)
基于第一篇文章搭建好环境以后,我们这篇文章继续介绍如何在springboot中使用RabbitMQ. 1).单播:添加好pom文件和自定义配置后,来看: @Autowired RabbitTempla ...
- 使用Rabbit MQ消息队列
使用Rabbit MQ消息队列 综合概述 消息队列 消息队列就是一个消息的链表,可以把消息看作一个记录,具有特定的格式以及特定的优先级.对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息 ...
- 手把手教你用redis实现一个简单的mq消息队列(java)
众所周知,消息队列是应用系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构.目前使用较多的消息队列有 ActiveMQ,RabbitMQ,Zero ...
- 阿里云ACE共创空间——MQ消息队列产品测试
一.产品背景消息队列是阿里巴巴集团自主研发的专业消息中间件. 产品基于高可用分布式集群技术,提供消息订阅和发布.消息轨迹查询.定时(延时)消息.资源统计.监控报警等一系列消息云服务,是企业级互联网架构 ...
- IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列
1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...
- Java语言快速实现简单MQ消息队列服务
目录 MQ基础回顾 主要角色 自定义协议 流程顺序 项目构建流程 具体使用流程 代码演示 消息处理中心 Broker 消息处理中心服务 BrokerServer 客户端 MqClient 测试MQ 小 ...
- 多维度对比5款主流分布式MQ消息队列,妈妈再也不担心我的技术选型了
1.引言 对于即时通讯网来说,所有的技术文章和资料都在围绕即时通讯这个技术方向进行整理和分享,这一次也不例外.对于即时通讯系统(包括IM.消息推送系统等)来说,MQ消息中件间是非常常见的基础软件,但市 ...
- 初识MQ消息队列
MQ 消息队列 消息队列(Message Queue)简称MQ,是阿里巴巴集团中间件技术部自主研发的专业消息中间件. 产品基于高可用分布式集群技术,提供消息发布订阅.消息轨迹查询.定时(延时)消息.资 ...
- Spring Boot:使用Rabbit MQ消息队列
综合概述 消息队列 消息队列就是一个消息的链表,可以把消息看作一个记录,具有特定的格式以及特定的优先级.对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息,对消息队列有读权限的进程则可以 ...
随机推荐
- python设计模式之门面模式
一.结构型设计模式 门面模式与单例模式,工厂模式不同,它是一种结构型模式. 结构型模式描述如何将对象和类组合成更大的结构 结构型模式是一种能够简化设计工作的模式,它能找出更简单的方法来认识或表示实体之 ...
- mySQL 约束 (Constraints)
约束用于限制加入表的数据的类型: 1.创建表时规定约束(通过 CREATE TABLE 语句) 2.表创建之后也可以(通过 ALTER TABLE 语句). 约束类型: NOT NULL(非空) UN ...
- 从PFX文件中获取私钥、公钥证书、公钥
https://blog.csdn.net/ZuoYanYouYan/article/details/77868584 该类具体功能:根据pfx证书得到私钥.根据私钥字节数组获取私钥对象.根据公钥字节 ...
- 【转】Java学习---Java核心数据结构(List,Map,Set)使用技巧与优化
[原文]https://www.toutiao.com/i6594587397101453827/ Java核心数据结构(List,Map,Set)使用技巧与优化 JDK提供了一组主要的数据结构实现, ...
- java使用elasticsearch进行模糊查询之must使用-项目中实际使用
java使用elasticsearch进行多个条件模糊查询 文章说明: 1.本篇文章,本人会从java连接elasticsearch到查询结果生成并映射到具体实体类(涵盖分页功能) 2.代码背景:el ...
- python创建目录保存文件
创建目录 在Python中可以使用os.mkdir()函数创建目录(创建一级目录). 其原型如下所示: os.mkdir(path) 其参数path 为要创建目录的路径. 例如要在D盘下创建hello ...
- HTML页面打印分页标签样式
<html> <head> <meta name="vs_targetSchema" content="http://schemas ...
- BZOJ 1934 善意的投票
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1934 题目大意: 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问 ...
- css盒子模型(box-sizing)
盒子模型 关于CSS重要的一个概念就是CSS盒子模型.它控制着页面这些元素的高度和宽度.盒子模型多少会让人产生一些困惑,尤其当涉及到高度和宽度计算的时候.真正盒子的宽度(在页面呈现出来的宽度)和高度, ...
- ROS初级教程 cmake cmakelist.txt 的编写教程
有很多 的时候我们使用别人的程序包.然后添加东西的时候缺少什么东西,会使程序编译不过去,甚至无法运行,接下来介绍一下cmakelist.txt 的每一行的作用.为了以后添加和修改方便. 2.整体结构和 ...