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

RabbitMQ基本使用一

消息队列(MQ)
MQ全称Message Queue,是一种应用程序对应用程序的通信方式。应用程序通过读写出入队列的消息来通信,而无需专用连接来连接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来进行通信(直接调用通常是用于诸如远程过程调用的技术)。

消息队列是典型的:生产者、消费者模型。 生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,这样就实现了生产者和消费者的解耦。

就比如在一个电商项目中:

商品的原始数据保存在数据库中,增删改查都在数据库中完成。
搜索服务数据来源是索引库(Elasticsearch),如果数据库商品发生变化,索引库数据不能及时更新。
商品详情做了页面静态化处理,静态页面数据也不会随着数据库商品更新而变化。
如果我们在后台修改了商品的价格,就需要搜索页面和商品详情页也对商品价格进行修改。 当商品价格出现改动时,后台会向MQ发送一条消息(比如包含商品id的消息)。 搜索服务和静态页面服务监听MQ,接收消息,然后分别对索引库和静态页面进行更新。

在这个过程中商品服务只管发送消息,而不用关心消息被谁接收,搜索服务和静态页面服务接收消息,分别去处理索引库和静态页面。如果以后有其它系统也依赖商品服务的数据,同样监听消息即可,商品服务无需任何代码修改。

AMQP和JMS
MQ是消息通信的模型,并不是具体实现。现在实现MQ的有两种主流方式:AMQP、JMS。

AMQP( Advanced Message Queuing Protocol),是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的开放标准为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端中间件不同产品,不同的开发语言等条件的限制。Eang中的实现有 Rabbits等

JMS (Java Messageservice),是由Sun公司早期提出的消息标准,旨在为Java应用提供统一的消息操作,包括 create、send、 receive 等。JMS已经成为 java Enterprise Edition的一部分。从使用角度看,JMS和JDBC担任差不多的角色,用户都是根据相应的接口可以和实现了MS的服务进行通信,进行相关的操作。

两者间的区别和联系:

JMS是定义了统一的接口,来对消息操作进行统一;AMQP是通过规定协议来统一数据交互的格式
JMS限定了必须使用Java语言;AMQP只是协议,不规定实现方式,因此是跨语言的。
JMS规定了两种消息模型;而AMQP的消息模型更加丰富

想学习更多JAVA知识的看这里哦

https://www.bilibili.com/video/BV1qL411u7eEicon-default.png?t=M7J4https://www.bilibili.com/video/BV1qL411u7eE

相关文章:

  • CentOS 7.2 正确安装 MySQL 5.6.35
  • 计算机组成与设计-第五章 memory hierarchy(一)
  • 软考高级系统架构设计师系列论文二:论软件的性能优化设计
  • 【CircuitPython】RaspberryPi Pico RP2040 自定义机械键盘实例
  • CentOS7.6安装Rabbitmq
  • 谁说文艺青年开花店必亏,我用3年时间挣了20万
  • 11种增加访问者在网站上平均停留时间的技巧
  • centos7.6 yum安装 elasticsearch
  • Android字母、数字版本、API级别对照表2022
  • 专利的分类
  • 删除链表的节点
  • Docker安装和基本配置
  • A40I工控主板(SBC-X40I)LED,铵键测试
  • 中国将从9月起实施严格的新跨境数据传输规则
  • 新唐NUC980使用记录:使用wpa_supplicant访问无线网络
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • const let
  • docker容器内的网络抓包
  • HomeBrew常规使用教程
  • HTTP中的ETag在移动客户端的应用
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Laravel 实践之路: 数据库迁移与数据填充
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • mongodb--安装和初步使用教程
  • node和express搭建代理服务器(源码)
  • React-redux的原理以及使用
  • spring-boot List转Page
  • Spring-boot 启动时碰到的错误
  • vue的全局变量和全局拦截请求器
  • 闭包,sync使用细节
  • 从零开始的无人驾驶 1
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 聚类分析——Kmeans
  • 力扣(LeetCode)21
  • 前端相关框架总和
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 异常机制详解
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (补)B+树一些思想
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (六)vue-router+UI组件库
  • (六)软件测试分工
  • (转)3D模板阴影原理
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .Net 路由处理厉害了
  • .Net各种迷惑命名解释
  • .net中应用SQL缓存(实例使用)
  • @SentinelResource详解
  • Ubuntu 个人电脑认证硬件
  • Django之模板继承
  • HTML元素(三)
  • RSA
  • CodeM美团点评编程大赛资格赛A题
  • CodeM美团点评编程大赛资格赛B题
  • HDU I-最少拦截系统
  • CodeM美团点评编程大赛资格赛C题
  • 屏蔽沪江小D的广告
  • COJ1957-Apache还想再活五百年