qidao123.com技术社区-IT企服评测·应用市场

标题: RabbitMQ基础入门(上) [打印本页]

作者: 冬雨财经    时间: 19 小时前
标题: RabbitMQ基础入门(上)
一、熟悉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对比:
RabbitMQRocketMQKafkaActiveMQ
语言ErlangJavaScala&JavaJava
协议支持 AMQP
XMPP
SMTP
STOMP
自定义协议自定义协议 OpenWire
STOMP
REST
XMPP
AMQP
可用性中等
单机吞吐量中等非常高
消息延长微秒毫秒毫秒级毫秒
消息可靠性中等中等
二、 RabbitMQ

RabbitMQ是基于Erlang语言开辟的开源消息通讯中心件
官网地址:RabbitMQ: One broker to queue them all | RabbitMQ
1.RabbitMQ安装

基于Docker来安装RabbitMQ
  1. docker run \
  2. -e RABBITMQ_DEFAULT_USER=your username \
  3. -e RABBITMQ_DEFAULT_PASS=your password \
  4. -v mq-plugins:/plugins \
  5. --name mq \
  6. --hostname mq \
  7. -p 15672:15672 \
  8. -p 5672:5672 \
  9. --network study-net\
  10. -d \
  11. 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企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4