首页 > 其他 > 详细

44.第36章 消息队列与微服务

时间:2021-05-27 11:27:30      阅读:15      评论:0      收藏:0      [点我收藏+]

一.RabbitMQ

1.1 RabbitMQ简介

RabbitMQ 采用Erlang 语言开发,Erlang 语言由Ericson 设计,Erlang 在分布式编程和故障恢复方面表现出色,电信领域被广泛使用。
https://www.erlang.org/

技术分享图片

Broker: 接收和分发消息的应用,RabbitMQ Server 就是Message Broker。
Virtual host: 出于多租户和安全因素设计的,把AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的namespace 概念,当多个不同的用户使用同一个RabbitMQ server 提供的服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange/queue 等。
Connection: publisher/consumer 和broker 之间的TCP 连接。
Channel: 如果每一次访问RabbitMQ 都建立一个Connection,在消息量大的时候建立TCP Connection 的开销将是巨大的,效率也较低。Channel 是在connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread 创建单独的channel 进行通讯,AMQP method 包含了channel id 帮助客户端和message broker识别channel,所以channel 之间是完全隔离的。Channel 作为轻量级的Connection极大减少了操作系统建立TCP connection 的开销。
Exchange: message 到达broker 的第一站,根据分发规则,匹配查询表中的routing key, 分发消息到queue 中去。常用的类型有: direct (point-to-point), topic (publish-subscribe) and fanout (multicast)。
Queue: 消息最终被送到这里等待consumer 取走。
Binding: exchange 和queue 之间的虚拟连接,binding 中可以包含routing key。Binding 信息被保存到exchange 中的查询表中,用于message 的分发依据。

rabbitmq 优势:
基于erlang 语言开发,具有高并发优点、支持分布式
具有消息确认机制、消息持久化机制,消息可靠性和集群可靠性高
简单易用、运行稳定、跨平台、多语言
开源
Queue 的特性:
消息基于先进先出的原则进行顺序消费
消息可以持久化到磁盘节点服务器
消息可以缓存到内存节点服务器提高性能

1.2 RabbitMQ 中的生产者消费者示例

技术分享图片

生产者发送消息到broker server(RabbitMQ),在Broker 内部,用户创建Exchange/Queue,通过Binding 规则将两者联系在一起,Exchange 分发消息,根据类型/binding 的不同分发策略有区别,消息最后来到Queue 中,等待消费者取走。

JMS 是在2001 年发布的Java 消息服务(Java Message Service)应用程序接口,是一个Java 平台中关于面向消息中间件(MOM,message oriented middleware)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

44.第36章 消息队列与微服务

原文:https://www.cnblogs.com/neteagles/p/14815649.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!