微服务03-RabbitMQ
1、简介
MQ,中文是消息中间件(队列)(MessageQueue),字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。
简单来说,消息中间件就是指保存数据的一个容器(服务器),可以用于两个系统之间的数据传递。
几种常见MQ的对比:
| RabbitMQ | ActiveMQ | RocketMQ | Kafka | |
|---|---|---|---|---|
| 公司/社区 | Rabbit | Apache | 阿里 | Apache |
| 开发语言 | Erlang | Java | Java | Scala&Java |
| 协议支持 | AMQP,XMPP,SMTP,STOMP | OpenWire,STOMP,REST,XMPP,AMQP | 自定义协议 | 自定义协议 |
| 可用性 | 高 | 一般 | 高 | 高 |
| 单机吞吐量 | 一般 | 差 | 高 | 非常高 |
| 消息延迟 | 微秒级 | 毫秒级 | 毫秒级 | 毫秒以内 |
| 消息可靠性 | 高 | 一般 | 高 | 一般 |
追求可用性:Kafka、 RocketMQ 、RabbitMQ
追求可靠性:RabbitMQ、RocketMQ
追求吞吐能力:RocketMQ、Kafka
追求消息低延迟:RabbitMQ、Kafka
=======================================================================
RabbitMQ是一个广泛使用的消息服务器,采用Erlang语言编写,是一种开源的实现 AMQP(高级消息队列协议)的消息中间件;
消息中间件一般有三个主要角色:生产者、消费者、消息代理(消息队列、消息服务器);
生产者发送消息到消息服务器,然后消费者从消息代理(消息队列)中获取数据并进行处理;
MQ的基本结构:

RabbitMQ中的一些角色:
- publisher:生产者
- consumer:消费者
- exchange个:交换机,负责消息路由
- queue:队列,存储消息
- virtualHost:虚拟主机,隔离不同租户的exchange、queue、消息的隔离
基本消息队列的消息发送流程:
-
建立connection
-
创建channel
-
利用channel声明队列
-
利用channel向队列发送消息
基本消息队列的消息接收流程:
-
建立connection
-
创建channel
-
利用channel声明队列
-
定义consumer的消费行为handleDelivery()
-
利用channel将消费者与队列绑定
2、RabbitMQ基本
RabbitMQ
3、SpringAMQP
SpringAMQP是基于RabbitMQ封装的一套模板,并且还利用SpringBoot对其实现了自动装配,使用起来非常方便。
SpringAMQP提供了三个功能:
- 自动声明队列、交换机及其绑定关系
- 基于注解的监听器模式,异步接收消息
- 封装了RabbitTemplate工具,用于发送消息
3.1.Basic Queue 简单队列模型
在父工程mq-demo中引入依赖
<!--AMQP依赖,包含RabbitMQ-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
3.1.1.消息发送
首先配置MQ地址,在publisher服务的application.yml中添加配置:
spring:rabbitmq:host: 192.168.150.101 # 主机名port: 5672 # 端口virtual-host: / # 虚拟主机username: itcast # 用户名password: 123321 # 密码
然后在publisher服务中编写测试类SpringAmqpTest,并利用RabbitTemplate实现消息发送:
package cn.itcast.mq.spring;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringAmqpTest {@Autowiredprivate RabbitTemplate rabbitTemplate;@Testpublic void testSimpleQueue() {// 队列名称String queueName = "simple.queue";// 消息String message = "hello, spring amqp!";// 发送消息rabbitTemplate.convertAndSend(queueName, message);}
}
3.1.2.消息接收
首先配置MQ地址,在consumer服务的application.yml中添加配置:
spring:rabbitmq:host: 192.168.150.101 # 主机名port: 5672 # 端口virtual-host: / # 虚拟主机username: itcast # 用户名password: 123321 # 密码
然后
相关文章:
微服务03-RabbitMQ
1、简介 MQ,中文是消息中间件(队列)(MessageQueue),字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。 简单来说,消息中间件就是指保存数据的一个容器(服务器),可以用于两个系统之间的数据传递。 几种常见MQ的对比: RabbitMQActiveMQRocketMQKafka公司…...
QtCreator ui设置界面 Layout 的属性 layoutStretch
layoutStretch 用于控制Layout在被用户进行缩放时。里面控件的缩放比例。如一个水平布局里面有两个控件 一个 QLineEdit 和 QPushButton。首先将两个控件的尺寸策列的水平策略都设置为Expanding。此时在将包含这两个控件的水平布局的 layoutStretch 进行如下设置。 运行程序就…...
APP外包开发的iOS开发语言
学习iOS开发需要掌握Swift编程语言和相关的开发工具、框架和技术。而学习iOS开发需要时间和耐心,尤其是对于初学者。通过坚持不懈的努力,您可以逐步掌握iOS开发技能,构建出功能丰富、优质的移动应用。今天和大家分享学习iOS开发的一些建议方法…...
sentinel客户端和dashboard交互
回顾 在前面的章节中:通过阐述sentinel简单使用、滑动窗口、核心流程源码分析把sentinel限流、熔断等主要功能说明清楚了,但我们在实际使用的过程中,不可能通过硬编码的方式设置规则,且规则也没法直观的维护,为此肯定…...
vue或uniapp使用pdf.js预览
一、先下载稳定版的pdf.js,可以去官网下载 官网下载地址 或 pdf.js包下载(已配置好,无需修改) 二、下载好的pdf.js文件放在public下静态文件里, uniapp是放在 static下静态文件里 三、使用方式 1. vue项目 注意路径 :src"static/pd…...
virtualBox桥接模式下openEuler镜像修改IP地址、openEule修改IP地址、openEule设置IP地址
安装好openEuler后,设置远程登入前,必不可少的一步,主机与虚拟机之间的通信要解决,下面给出详细步骤: 第一步:检查虚拟机适配器模式:桥接模式 第二步:登入虚拟机修改IP cd /etc/sysconfig/network-scripts vim ifcfg-enpgs3 没有vim的安装或者用vi代替:sudo dnf …...
git unable to get local issuer certificate (_ssl.c:1007)>
原因1:Git无法验证SSL证书 这个错误通常是由于Git无法验证SSL证书导致的。您可以尝试以下方法解决此问题: 确认您的计算机上是否安装了正确的SSL证书。如果没有,请下载并安装它们。您可以使用以下命令在Mac上安装SSL证书: brew…...
QT之时钟
QT之时钟 会用到一个时间类:qtime 定时类:qtimer #------------------------------------------------- # # Project created by QtCreator 2023-08-13T10:49:31 # #-------------------------------------------------QT += core guigreaterThan(QT_MAJOR_VERSION,…...
机器学习基础(四)
KNN算法 KNN:K-Nearest Neighbor,最近领规则分类。 为了判断位置实例的类别,以所有已知类别的实例作为参照选择参数K。计算未知实例与所有已知实例的距离。(一般采用欧氏距离)选择最近K个已知实例。根据少数服从多数的投票法则,让未知实例归类为K个最近邻样本中最多数的类…...
HTML详解连载(5)
HTML详解连载(5) 专栏链接 [link](http://t.csdn.cn/xF0H3)下面进行专栏介绍 开始喽行高:设置多行文本的间距属性名属性值行高的测量方法 行高-垂直居中技巧 字体族属性名属性值示例扩展 font 复合属性使用场景复合属性示例注意 文本缩进属性…...
【CI/CD】基于 Jenkins+Docker+Git 的简单 CI 流程实践(上)
基于 JenkinsDockerGit 的简单 CI 流程实践(上) 在如今的互联网时代,随着软件开发复杂度的不断提高,软件开发和发布管理也越来越重要。目前已经形成一套标准的流程,最重要的组成部分就是 持续集成 及 持续交付、部署。…...
基于FPGA的PID算法理论详解(1)
基于FPGA的PID算法理论详解(1) 1 概述 比例-积分-微分(PID)控制是业内最常见的控制算法,在工业控制领域有很高的接受度。PID控制器的广泛应用得益于其在多种操作条件下稳定的性能,以及易操作的特性。工程师可以用简单直观的方式实现PID控制。PID控制有三个基本要件:比…...
Neo4j之REMOVE基础
在 Neo4j 中,REMOVE 语句用于从节点中删除特定的属性。这在你需要更新或者清除节点属性时非常有用。 1】删除单个属性: MATCH (p:Person {name: Alice}) REMOVE p.age;这个查询会找到具有 "Person" 标签且属性 "name" 为 "Al…...
SpingBoot-Vue前后端——实现CRUD
目录 一、实例需求 ⚽ 二、代码实现 🏌 数据库 👀 后端实现 📫 前端实现 🌱 三、源码下载 👋 一、实例需求 ⚽ 实现一个简单的CRUD,包含前后端交互。 二、代码实现 🏌 数…...
LeetCode150道面试经典题--最后一个单词的长度(简单)
1.题目 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 2.示例 3.思路 通过对字符串的反转,转为数组开始遍历,…...
web-xss-dvwa
目录 xss(reflected) low medium high xss(store) low medium high xss(dom) low medium high xss(reflected) low 没有什么过滤,直接用最普通的标签就可以了 http://127.0.0.1/DVWA-master/vulnerabili…...
Exploiting Proximity-Aware Tasks for Embodied Social Navigation 论文阅读
论文信息 题目:Exploiting Proximity-Aware Tasks for Embodied Social Navigation 作者:Enrico Cancelli, Tommaso Campari 来源:arXiv 时间:2023 Abstract 学习如何在封闭且空间受限的室内环境中在人类之间导航&a…...
【华为OD机试】统计射击比赛成绩【2023 B卷|100分】
【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 给定一个射击比赛成绩单,包含多个选手若干次射击的成绩分数, 请对每个选手按其最高3个分数之和进行降序排名,输出降序排名后的选手ID序列。 条件如下: 1、一个选手可以有多个射击成…...
git push之后的撤销操作
用的是idea。 pull了代码之后,想撤销pull: push代码到个人远程仓库之后,又从主仓pull了一下。 点击其中一条git记录,然后右键单击“reset current branch ti here”,然后再点击hard push了代码到个人仓库,想撤销&…...
CSS 的选择器有哪些种类?分别如何使用?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 元素选择器(Element Selector)⭐ 类选择器(Class Selector)⭐ ID 选择器(ID Selector)⭐ 后代选择器(Descendant Selector)⭐ 子元素选择器&a…...
终极指南:Apache Lucene索引原理深度解析——揭秘全文搜索的底层实现
终极指南:Apache Lucene索引原理深度解析——揭秘全文搜索的底层实现 【免费下载链接】lucene-solr Apache Lucene and Solr open-source search software 项目地址: https://gitcode.com/gh_mirrors/lu/lucene-solr Apache Lucene作为一款高性能、可扩展的全…...
Hacktoberfest终极指南:利用swag-for-dev最大化开源贡献回报
Hacktoberfest终极指南:利用swag-for-dev最大化开源贡献回报 【免费下载链接】swag-for-dev 😎 swag opportunities for developers 项目地址: https://gitcode.com/gh_mirrors/sw/swag-for-dev Hacktoberfest是开发者参与开源贡献的黄金时机&…...
终极指南:incubator-pagespeed-ngx缓存机制深度剖析与性能优化技巧
终极指南:incubator-pagespeed-ngx缓存机制深度剖析与性能优化技巧 【免费下载链接】incubator-pagespeed-ngx 项目地址: https://gitcode.com/gh_mirrors/incu/incubator-pagespeed-ngx incubator-pagespeed-ngx是一个强大的Nginx模块,通过智能…...
Optimizing Clock Tree Synthesis: From Library Path Delays to Pin-Level Latencies
1. 时钟树综合优化的核心挑战 在芯片设计流程中,时钟树综合(CTS)是最关键的步骤之一。想象一下,时钟信号就像城市里的公交车,需要准时到达每一个站点(寄存器)。但现实情况是,工艺变异…...
wife调式的Ioc频次给几率
wife 被攻击sql,导致IP地址属地波束频率过流压制,被限定单量用于恶意ssl攻击,在被强力攻击IP•iccid频率Bu,在过滤器的emeiN,进击性开启恶意-qcl,过级率下的Npm存在严重漏洞bug,导致…...
python mapbox
# 聊聊pydeck:当Python遇见地理空间可视化 最近在做一个城市交通数据的分析项目,需要在地图上展示数百万个轨迹点。试了几个库之后,发现pydeck这个工具确实有点意思,今天就来聊聊它。 它到底是什么 pydeck本质上是一个桥梁&#x…...
3分钟掌握猫抓浏览器扩展:网页视频音频一键下载的终极指南
3分钟掌握猫抓浏览器扩展:网页视频音频一键下载的终极指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否经常遇到想保存网页视…...
深入理解Go编译器:从源码到可执行文件的完整旅程
深入理解Go编译器:从源码到可执行文件的完整旅程 【免费下载链接】under-the-hood 📚 Go: Under The Hood | Go 语言原本 | https://golang.design/under-the-hood 项目地址: https://gitcode.com/gh_mirrors/un/under-the-hood Go语言以其高效的…...
用STM32和US100超声波模块做个智能小车避障:从硬件连接到代码调试全流程
STM32与US100超声波模块实战:打造高精度智能避障小车 项目背景与核心组件 智能小车作为嵌入式开发的经典项目,融合了传感器技术、电机控制和算法逻辑等多个领域。在这个项目中,我们将使用STM32F103C8T6最小系统板作为主控,搭配US1…...
Beyond CNNs: How Vision Transformers Revolutionize Image Recognition at Scale
1. 视觉Transformer为何能超越CNN? 记得我第一次用ResNet50跑ImageNet分类时,被它的准确率惊艳到了。但当我尝试用ViT-L/16在同样数据集上训练时,测试集top-1准确率直接高出3个百分点——这相当于过去CNN架构迭代两三代的提升幅度。为什么这…...
