快速入门RabbitMQ并且加入项目实战-kuai-su-ru-men-rabbitmq-bing-qie-jia-ru-xiang-mu-shi-zhan(一)

简介: 快速入门RabbitMQ并且加入项目实战-kuai-su-ru-men-rabbitmq-bing-qie-jia-ru-xiang-mu-shi-zhan

一、MQ概述

精短简介

Java中有队列数据结构,但是是基于内存的,只有本JVM可以使用
MQ中间件是一个多客户端节点可以操作的队列结构

简单案例

异步消息处理(注册)

发送邮件、发送注册短信使用异步消息的模式,使得注册操作快速响应

应用解耦(订单_库存)

扣减库存接口可能会根据库存系统的升级而升级,而不得不导致订单系统也需要升级(重新部署)
使用消息队列后,库存系统订阅队列即可,无需关心库存系统接口升级的问题

流量控制

高并发场景下(秒杀),将请求存入mq,后台系统按照自己的处理能力来消费任务,达到削峰的目的

概述

消息代理(message broker)

消息代理:指安装了消息中间件的服务器,用于接收消息和发送消息

目的地(destination)

通俗解释:消息代理接收到消息后会将消息继续发给目的地(生产者发送消息)
目的地主要有两种形式:队列、主题

队列(queue)【单播_点对点消息通信】

点对点消息通信(point-to-point)
1.消息发送者发送消息,消息代理将其放入一个队列中,消息接受者从队列中获取消息内容,消息读取后被移出队列
2.队列可以被多个消费者监听,但一条消息只会被一个消费者成功消费

主题(topic)【广播_发布/订阅】

发布(publish)/订阅(subscribe)消息通信
1.发送者发送消息到主题,多个订阅者订阅该主题,多个消费者会同时收到消息

两种规范

JMS(JAVA消息服务)

JMS:(Java Message Service)
JAVA消息服务,基于JVM信息代理的规范。ActiveMQ、HornetMQ是JMS实现

AMQP(高级消息队列协议)

AMQP:(Advanced Message Queuing Protocol)
高级消息队列协议,也是一个消息代理的规范,兼容JMS
RabbitMQ是AMQP的实现

基于以上两种规范的分析

支持消息类型:byte[]=》只要能支持byte[]就可以传输,例如将对象转换为json,然后转二进制流传输即可
五种消息模型:重要,direct exchange其实就是队列
            后四种就是主题的变种

Spring支持与SpringBoot自动装配

使用@EnableRabbit开启自动配置

二、RabbitMQ安装与测试

文档:https://www.rabbitmq.com/networking.html

docker安装

4369,25672(Erlang发现&集群端口)
5672,5671(AMQP端口)
15672(web管理后台端口)
61613,61614(STOMP协议端口)
1883,8883(MQTT协议端口)
https://www.rabbitmq.com/networking.html 
1.下载镜像并启动
docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:management
2.修改为自动重启
docker update rabbitmq --restart=always
3.登录管理页面
http://192.168.56.10:15672/
guest
guest

RabbitMQ运行机制

消息路由名词解释

1.新增了Exchange和Binding角色
2.消息路由:消息到达Exchange,并根据Binding关系发布到Queue队列中的过程,被称为消息路由

Exchange类型

direct

fanout

topic

1.Exchange名词解释:是AMQP高级消息队列协议的划分
2.RabbitMQ有四种Exchange类型:
  2.1.点对点通信
    2.1.1.direct
      解析:直接交换机【单播模式,按照路由关系精确匹配】
      例:路由键是dog,direct Exchange绑定了两个队列,队列1:dog、队列2:dogTom
      使用direct Exchange只会把消息发送给队列1
    2.1.2.headers【性能比较低,不会用到,与direct几乎一致】
  2.2.发布/订阅:
    2.2.1.fanout
      解析:扇形【广播模式,不关心路由键】
      例:消息会发送给fanout Exchange绑定的所有队列
    2.2.2.topic
      解析:主题【部分广播,区分路由键】
      例:binding.key=usa.* :*处必须有一个单词
               binding.key=#.news:#处有0个或多个单词
      注:不能匹配字母,只能匹配单词
3.

direct案例:

fanout案例:

Topic案例:

测试案例

测试案例1

http://192.168.56.10:15672/#/exchanges
1.新建交换机
Exchanges=》Add a new Exchange=》Add Exchange
2.新建队列
Queues=》Add a new Queue=》Add Queue
3.在交换机表格中点击新建的交换机,绑定刚刚新建的队列
Bindings=》Add binding from this exchange=》To queue=》Bind
4.发送消息
=》publishe Message
5.获取消息
Nack message requeue true
Automatic ack
Reject requeue true
Reject requeue false
6.解除binding
=》unbind

1.新建交换机:

2.新建队列:

3.在交换机表格中点击新建的交换机:

4.发送消息

消息发送成功:

5.获取消息

Nack message requeue true
不回复消息,并且消息重新入队
Automatic ack
自动回复消息,消息不重新入队
Reject requeue true


Reject requeue false


6.解除binding

测试案例2

根据上表
1.建立交换机:
  exchange.direct【点对点】
  exchange.fanout【广播,消息会发送给binding的多个队列中】
  exchange.topic【广播,会先找到存在binding关系的队列,然后按照binding关系的路由规则与路由键进行模糊匹配】
2.建立队列:
  atguigu
  atguigu.news
  atguigu.emps
  gulixueyuan.news
3.创建binding关系
  exchange.direct绑定所有队列【绑定规则是根据路由键与路由精确绑定决定消息进入哪个队列】
  exchange.fanout绑定所有队列【消息会发送给每个队列】
  exchange.topic绑定所有队列【并设置不同的路由键atguigu.#、*.news】
4.发送消息


快速入门RabbitMQ并且加入项目实战-kuai-su-ru-men-rabbitmq-bing-qie-jia-ru-xiang-mu-shi-zhan(二)https://developer.aliyun.com/article/1469516

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
1月前
|
消息中间件 Java 测试技术
快速入门RabbitMQ并且加入项目实战-kuai-su-ru-men-rabbitmq-bing-qie-jia-ru-xiang-mu-shi-zhan(二)
快速入门RabbitMQ并且加入项目实战-kuai-su-ru-men-rabbitmq-bing-qie-jia-ru-xiang-mu-shi-zhan
99 1
|
1月前
|
消息中间件 运维 Java
RabbitMQ快速入门(简单收发消息)
RabbitMQ快速入门(简单收发消息)
RabbitMQ快速入门(简单收发消息)
|
1月前
|
消息中间件 存储 Java
RabbitMQ-同步和异步区别&快速入门
RabbitMQ-同步和异步区别&快速入门
41 1
|
1月前
|
消息中间件 Java Kafka
【RabbitMQ】RabbitMQ快速入门 通俗易懂 初学者入门
【RabbitMQ】RabbitMQ快速入门 通俗易懂 初学者入门
118 0
|
9月前
|
消息中间件 SQL 负载均衡
RocketMQ快速入门 2
RocketMQ快速入门
148 0
|
13天前
|
消息中间件 Java 双11
RocketMQ:揭秘电商巨头背后的消息队列秘密
**RocketMQ概览:**高性能分布式消息队列,适用于有序消息、事务处理、流计算、消息推送、日志处理及Binlog分发。在双11等高流量场景下证明了其性能、稳定性和低延迟。Java开发,利于扩展,性能超RabbitMQ,支持死信队列,但可能有集成兼容性问题。适合Java开发者,为电商等场景优化,每秒处理大量消息。
32 3
RocketMQ:揭秘电商巨头背后的消息队列秘密
|
20天前
|
消息中间件 监控 应用服务中间件
消息队列 MQ操作报错合集之重启Broker后,积压数出现为负数是什么导致的
在使用消息队列MQ时,可能会遇到各种报错情况。以下是一些常见的错误场景、可能的原因以及解决建议的汇总:1.连接错误、2.消息发送失败、3.消息消费报错、4.消息重试与死信处理、5.资源与权限问题、6.配置错误、7.系统资源限制、8.版本兼容性问题。
消息队列 MQ操作报错合集之重启Broker后,积压数出现为负数是什么导致的
|
20天前
|
消息中间件 Java 测试技术
消息队列 MQ操作报错合集之设置了setKeepAliveInterval(1)但仍然出现客户端未连接,该怎么解决
在使用消息队列MQ时,可能会遇到各种报错情况。以下是一些常见的错误场景、可能的原因以及解决建议的汇总:1.连接错误、2.消息发送失败、3.消息消费报错、4.消息重试与死信处理、5.资源与权限问题、6.配置错误、7.系统资源限制、8.版本兼容性问题。
|
20天前
|
消息中间件 设计模式 网络安全
消息队列 MQ操作报错合集之broker启用controller配置时,遇到报错,是什么导致的
在使用消息队列MQ时,可能会遇到各种报错情况。以下是一些常见的错误场景、可能的原因以及解决建议的汇总:1.连接错误、2.消息发送失败、3.消息消费报错、4.消息重试与死信处理、5.资源与权限问题、6.配置错误、7.系统资源限制、8.版本兼容性问题。
|
20天前
|
消息中间件 Apache RocketMQ
消息队列 MQ操作报错合集之设置了controller后,有一主一从,但只显示一个,该怎么解决
在使用消息队列MQ时,可能会遇到各种报错情况。以下是一些常见的错误场景、可能的原因以及解决建议的汇总:1.连接错误、2.消息发送失败、3.消息消费报错、4.消息重试与死信处理、5.资源与权限问题、6.配置错误、7.系统资源限制、8.版本兼容性问题。