springboot 消息JMS,AMQP,RabbitMQ

消息三大优势

  • 异步处理
  • 流量削峰
  • 应用解耦

概述

  • 消息服务两个重要概念
    • 消息代理(message broker)和目的地(destinaton)
      当消息发送者发送消息后,由消息代理接管,消息代理保证消息传递到指定目的地
  • 消息队列主要两种方式的目的地
    • 队列(queue):点对点消息通信
    • 主题(queue):发布(publish)/订阅(subscribe)消息通信

两种消息机制

点对点
  • 消息发送者发送消息,消息代理将其放入一个队列中,消息接收者从队列中获取消息内容,消息读取后移出队列
  • 消息只有唯一的发送者和接收者,但不是说只有一个接收者
发布订阅
  • 发送者发送消息到消息主题,多个接收者(订阅者)监听(订阅)这个主题,那么消息就会在消息到达时同时收到消息

两种消息规范

JMS(Java Message Service)java消息服务:
  • 基于jvm消息代理的规范。ActiveMQ是JMS实现
AMQP(Advanced Message Queuing Protocol)
  • 高级消息队列协议,也是一个消息代理的规范,兼容JMS
  • RabbitMQ是AMQP的实现
JMS AMQP
定义 Java api 网络线级协议
跨平台
跨语言
Model 提供两种消息模型
1. Peer-2-Peer
2. Pub/Sub
提供五种消息模型:
1. direct exchange
2. fanout exchange
topic change
4. headers exchange
system exchange
本质来讲,后四种和JMS的pub/sub模型没有太大的区别,知识路由机制划分的更详细
支持消息类型 多种消息类型
TextMessage
MapMessage
ByteMessage
StreamMessage
ObjextMessage
Message(只有i消息头和属性)
byte[]
实际应用,复杂消息将消息序列化后发送
综合评价 JMS定义了JAVA API层面的标准,在JAVA体系中,多个client均可以通过JMS交互,不需要吸引改代码,平台的支持较差 AMQP定义write-level层的协议标准,天然具有跨平台,跨语言特性。

spring支持

  • spring-jms提供对jms的支持
  • spring-rabbit提供对amqp的支持
  • 需要ConnectionFactory的实现来连接消息代理
  • 提供了JmsTemplate ,RabbitTemplate发送消息
  • @JmsListenner(JMS),@RabbitListener(AMQP)注解在方法上监听消息代理发布的消息
  • @EnableJms,@EnableRabbit开启支持

springboot

  • springboot提供了启动器
  • springboot的自动配置
    • JmsAutoConfiguration
    • RabbitAutoConfiguration

RabbitMQ简介

简介

Rabbit是一个基于erlang语言开发的AMQP的开源实现

核心概念
  • Message
    消息,消息是不具名的,由消息头和消息体组成,消息是不透明的,而消息头由一些列可选的属性组成,这些属性包括routing-key(路由键),priority(相对于其他消息的优先权),delivery-mode(指出该消息可能需要持久性存储)等
  • Publisher
    消息的生产者,也是一个向交换器发布消息的客户端应用程序
  • Exchange
    交换器,用来接收生产者发送的消息并将这些消息路由到服务器的队列。
    Excnage有四种类型:direct(默认),fanout,topic,headers,不同类型的Excnage转发消息的策略有所不同。其中direct可以实现jms点对点模式,其余可以实现订阅模式
  • Queue
    消息队列,用来保存消息知道发送给消费者。它是消息的容器,也是消息的重点。一个消息可以投入一个或多个队列,消息一直在队列里面,等待消费者连接这个队列将其取走。
  • Binding
    绑定,用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,可以将交换器理解成一个由绑定构成的路由表。
    Exchange和Queue的绑定可以是多对多的关系。
  • Connection
    网络连接,比如一个tcp连接。
  • Channel
    信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真是的TCP连接内的虚拟连接,AMQP命令都是通过信道发出去的,不管是发布消息,订阅队列还是接受消息,这些动作都是通过信道完成。因为对于操作系统来说建立和销毁TCP都是非常昂贵的开销,所以引入了信道的概念,以复用一条TCP连接
  • Consumer
    消息的消费者,表示一个从消息队列获取消息的客户端程序
  • Virtual Host
    虚拟主机,表示一批交换器,消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个vhost本质上酒适一个mini的RabbitMQ服务器,拥有自己的队列,减缓其,绑定和权限机制。vhost是AMQP概念的基础,必须在连接时指定,RabbitMQ默认的vhost是/
  • Broker
    表示消息队列服务器实体
    springboot 消息JMS,AMQP,RabbitMQ_第1张图片

RabbitMQ运行机制

springboot 消息JMS,AMQP,RabbitMQ_第2张图片
springboot 消息JMS,AMQP,RabbitMQ_第3张图片
springboot 消息JMS,AMQP,RabbitMQ_第4张图片
springboot 消息JMS,AMQP,RabbitMQ_第5张图片
springboot 消息JMS,AMQP,RabbitMQ_第6张图片

整合RabbitMQ

1 安装RabbitMQ ,使用docker,可以使用镜像中国加速
springboot 消息JMS,AMQP,RabbitMQ_第7张图片
在这里插入图片描述
在这里插入图片描述
界面访问 IP:15672 默认登陆用户名密码 guest guest

直接在界面创建交换器队列并绑定

比如创建如下:
springboot 消息JMS,AMQP,RabbitMQ_第8张图片

  • 创建交换器
    springboot 消息JMS,AMQP,RabbitMQ_第9张图片
    在这里插入图片描述
  • 创建队列
    springboot 消息JMS,AMQP,RabbitMQ_第10张图片
    springboot 消息JMS,AMQP,RabbitMQ_第11张图片
  • 绑定
    点击交换器,进入详细界面,进行绑定
    springboot 消息JMS,AMQP,RabbitMQ_第12张图片
  • 界面可以测试 在Exchange选择一个交换器发送消息
    springboot 消息JMS,AMQP,RabbitMQ_第13张图片
  • 在Queue可以查看消息
    springboot 消息JMS,AMQP,RabbitMQ_第14张图片
    springboot 消息JMS,AMQP,RabbitMQ_第15张图片
    springboot 消息JMS,AMQP,RabbitMQ_第16张图片
  • springboot整合RabbitMQ
    https://blog.csdn.net/weixin_43704975/article/details/98478702

你可能感兴趣的:(java)