论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
大数据
›
数据仓库与分析
›
RabbitMQ基础入门(上)
RabbitMQ基础入门(上)
冬雨财经
论坛元老
|
19 小时前
|
显示全部楼层
|
阅读模式
楼主
主题
1727
|
帖子
1727
|
积分
5181
一、熟悉MQ
1.同步调用
OpenFeign 是一个声明式的 Web 服务客户端,它使得编写 HTTP 客户端变得更加轻易。它属于一种声明式、模板化的HTTP客户端,旨在简化微服务之间的调用过程。OpenFeign 最初是由 Netflix 开辟的 Feign 项目演变而来,现在是 Spring Cloud 的一部分,称为 Spring Cloud OpenFeign。这种调用中,调用者发起哀求后必要
等候
服务提供者实行业务返回结果后,才能继续实行后面的业务。我们称这种调用方式为
同步调用
,也可以叫
同步通
讯
。
用微服务项目中的
余额付出功能
为例子介绍:
采用的是基于OpenFeign的同步调用,业务流程为:
1.付出服务先调用用户服务完成余额扣减
2.更新付出流水单的状态
3.付出服务调用交易服务,更新业务订单状态为已付出
三个步骤依次实行,这就导致了一些问题:拓展性差、性能降落和级联失败。
这时我们就要用异步调用的方式来代替同步调用来解决这些问题。
2.异步调用
异步调用方式实在就是基于消息通知的方式,此中包罗了三个重要角色:
消息发送者、消息Broker和消息吸取者
在异步调用中,发送者不再直接同步调用吸取者的业务接口,而是发送一条消息投递给消息Broker。然后吸取者根据本身的需求从消息Broker那边获取消息。每当发送方发送消息后,接受者都能获取消息并处理。
以余额付出为例:
除了扣减余额、更新付出流水单状态以外,其它调用逻辑全部取消。而是改为发送一条消息到Broker。而干系的微服务都可以订阅消息通知,一旦消息到达Broker,则会分发给每一个订阅了的微服务,处理各自的业务。
采用异步调用,排除了耦合,即便别的服务实行过程中出现了故障,也不会影响到付出服务。
当未来必要新的服务,只必要让新的服务也吸取Broker发送的消息即可,不消改变付出代码逻辑,大大进步了业务性能。
异步通讯上风:
耦合度低、性能高、拓展性强、故障隔离
3.MQ
消息Broker,目前常见的实现方案就是消息队列(MessageQueue),简称为MQ.
常见的MQ实现有以下选择:
ActiveMQ、RabbitMQ、RocketMQ、Kafka
四种MQ对比:
RabbitMQ
RocketMQ
Kafka
ActiveMQ
语言
Erlang
Java
Scala&Java
Java
协议支持
AMQP
XMPP
SMTP
STOMP
自定义协议
自定义协议
OpenWire
STOMP
REST
XMPP
AMQP
可用性
高
高
高
中等
单机吞吐量
中等
高
非常高
差
消息延长
微秒
毫秒
毫秒级
毫秒
消息可靠性
高
高
中等
中等
二、 RabbitMQ
RabbitMQ是基于Erlang语言开辟的开源消息通讯中心件
官网地址:RabbitMQ: One broker to queue them all | RabbitMQ
1.RabbitMQ安装
基于Docker来安装RabbitMQ
docker run \
-e RABBITMQ_DEFAULT_USER=your username \
-e RABBITMQ_DEFAULT_PASS=your password \
-v mq-plugins:/plugins \
--name mq \
--hostname mq \
-p 15672:15672 \
-p 5672:5672 \
--network study-net\
-d \
rabbitmq:3.8-management
复制代码
注意:默认用户名和暗码改成本身的
访问端口地址,输入用户名及暗码登录即可进入管理控制台,如图所示
RabbitMQ对应的架构:
publisher:生产者,也就是发送消息的一方
consumer:消费者,也就是消费消息的一方
queue:队列,存储消息。生产者投递的消息会暂存在消息队列中,等候消费者处理
exchange:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。
virtual host:虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的exchange、queue
2.收发消息
1.交换机
在Exchanges选项卡下有很多交换机
我们点击恣意交换机,即可进入交换机详情页面。仍然会利用控制台中的publish message 发送一条消息:
发送消息:Hello Java!
这里模拟了生产者发送消息,由于没有消费者存在,最终消息丢失了,这样说明交换机没有存储消息的能力。
2.队列
打开Queues选项卡新建一个队列,在Name属性上定名为queue-test
再以相同的方式,创建一个队列queue-test1
点击Exchanges选项卡,点击amq.direct交换机,进入交换机详情页,然后点击Bindings菜单,在表单中填写要绑定的队列名称queue-test和queue-test1:
此时重新发送消息就会乐成
3.数据隔离
在Admin选项卡中新建一个用户user1,此时user1用户没有任何的访问权限
使用user1用户登录,在Admin选项卡右侧进入Virtual Hosts管理页,可以给项目创建一个单独的virtual host,而不是使用默认的/。
此时用户就存在了对/test的这个virtual host的权限了,这就实现了virtual host的隔离结果。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
冬雨财经
论坛元老
这个人很懒什么都没写!
楼主热帖
信息与网络安全期末复习(完整版) ...
ts保姆级教程,别再说你不会ts了 ...
iOS全埋点解决方案-手势采集 ...
如何通过JDBC访问MySQL数据库?手把手 ...
Elasticsearch学习系列五(零停机索引 ...
Pod概述
Fastjson反序列化
Linux安装PHP8 新版笔记
Log4j2 CVE-2021-44288 代码审计(底层 ...
《ABP Framework 极速开发》教程首发 ...
标签云
渠道
国产数据库
集成商
AI
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表