当前位置: 首页 > news >正文

微服务03-RabbitMQ

1、简介

MQ,中文是消息中间件(队列)(MessageQueue),字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。
简单来说,消息中间件就是指保存数据的一个容器(服务器),可以用于两个系统之间的数据传递。

几种常见MQ的对比:

RabbitMQActiveMQRocketMQKafka
公司/社区RabbitApache阿里Apache
开发语言ErlangJavaJavaScala&Java
协议支持AMQP,XMPP,SMTP,STOMPOpenWire,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、消息的隔离

基本消息队列的消息发送流程:

  1. 建立connection

  2. 创建channel

  3. 利用channel声明队列

  4. 利用channel向队列发送消息

基本消息队列的消息接收流程:

  1. 建立connection

  2. 创建channel

  3. 利用channel声明队列

  4. 定义consumer的消费行为handleDelivery()

  5. 利用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 # 密码

然后

http://www.lryc.cn/news/122289.html

相关文章:

  • QtCreator ui设置界面 Layout 的属性 layoutStretch
  • APP外包开发的iOS开发语言
  • sentinel客户端和dashboard交互
  • vue或uniapp使用pdf.js预览
  • virtualBox桥接模式下openEuler镜像修改IP地址、openEule修改IP地址、openEule设置IP地址
  • git unable to get local issuer certificate (_ssl.c:1007)>
  • QT之时钟
  • 机器学习基础(四)
  • HTML详解连载(5)
  • 【CI/CD】基于 Jenkins+Docker+Git 的简单 CI 流程实践(上)
  • 基于FPGA的PID算法理论详解(1)
  • Neo4j之REMOVE基础
  • SpingBoot-Vue前后端——实现CRUD
  • LeetCode150道面试经典题--最后一个单词的长度(简单)
  • web-xss-dvwa
  • Exploiting Proximity-Aware Tasks for Embodied Social Navigation 论文阅读
  • 【华为OD机试】统计射击比赛成绩【2023 B卷|100分】
  • git push之后的撤销操作
  • CSS 的选择器有哪些种类?分别如何使用?
  • 【MongoDB】索引
  • 机器人CPP编程基础-02变量Variables
  • 【学会动态规划】买卖股票的最佳时机 IV(18)
  • 请解释一下CSS中的rem和em单位有什么不同,分别如何使用?
  • docker 导入镜像 REPOSITORY和tag都是null怎么解决
  • c语言操作符
  • python爬虫5:requests库-案例3
  • uni-app:实现点击按钮,进行数据累加展示(解决数据过多,导致出错)
  • 群晖6.X便捷的安装cpolar内网穿透
  • ffmpeg 4.4版本对MP4文件进行AES-CTR加密,和流式加密
  • 软件测试基础篇——Docker