消息中间件介绍

消息中间件介绍_第1张图片1.消息中间件简介

 

 

消息中间件是在消息的传输过程中保存消息的容器。消息中间件在将消息从它的源中继到它的目标时充当中间人的作用。队列的主要目的是提供路由并保证消息的传递,如果发送消息时接受者不可用,消息队列会保留消息,知道可以成功传递它为止,当然,消息队列保持消息也是有期限的。

 

2.消息中间件特点

 

 - 采用异步处理模式

 

    消息发送者可以发送一个消息而无须等待响应。消息发送者将消息发送到一条虚拟的通道(主题或队列

 

上,消息接受者则订阅或是监听通道。

 

   - 应用程序和应用程序调用关系为松耦合关系

 

    发送者和接受者不必了解对方、只需要确认消息

 

    发送者和接受者不必同时在线

 

3.消息传递服务模型

 

 

 

4.消息队列的作用

 

解耦,异步,缓冲,收集,队列,存储

 

5.消息中间件的传递模型

 

 - 点对点模型(PTP)

 

    每个消息只用一个消费者

 

    发送者和接受者没有时间依赖

 

    接受者确认消息接受和处理成功

 

 - 发布-订阅模型(Pub/Sub)

 

 每个消息可以有多个订阅者

 

 客户端只有订阅后才能接收消息

 

 持久订阅和非持久订阅

 

6.发布-订阅模型特点

 

  - 发布者和订阅者有时间依赖:接受者和发布者只有建立订阅关系才能收到消息

 

  - 持久订阅:订阅关系建立后,消息就不会消失,不管订阅者是否都在线

 

  - 非持久订阅:订阅者为了接受消息,必须一直在线,当只有一个订阅时约等于点对点模式

 

 7. 互联网消息中间件应用场景

 

     1.网站用户注册,注册成功后会发送邮件确认或短信(异步)

 

        填写注册信息--用户注册服务--消息中间件--邮件服务|短信服务

 

     2.日志进行集中收集,用于计算PV,用户行为分析

 

        应用服务|应用服务|--消息中间件--pv分析服务|行为分析服务

 

     3.数据复制

 

        将数据从源头复制到多个目的地,一般是要求顺序或者保证因果序列

 

        用于跨机房数据传输、搜索、离线数据计算

 

        DB--DB Sync--Broker--Search|hadoop|DB

 

      4. 延迟消息发布和暂存

 

        把消息中间件当成可靠的消息暂存地

 

        定时进行消息投递,比如模拟用户秒杀访问,进行系统性能压测

 

     5.消息广播

 

        缓存数据同步更新

 

        往应用推送数据

 

8.消息中间件分类

 

  1.推消息模型(push):消息生产者将消息发送给消息传递服务,消息传递服务又将消息推给消费者--场景:交易,注册

 

  2.拉消息模型(pull):消费者请求消息服务接受消息,消息生产者从消息中间拉该消息--场景:行为分析,PV计算

 

 

 

9.metaq消息中间件(pull)

 

metaq是一款完全的队列模型消息中间件,服务器使用java语言编写,可在多种软硬件平台上部署。客户端支持java/c++编程语言。单台服务器可支持1万以上各消息队列,通过扩容服务器,队列数几乎可任意横向扩展。每个队列都是持久化,长度无限(取决于磁盘空间大小),并且可从队列任意位置开始消费

 

官网:http://metaq.taobao.org

 

 

 

10.metaq特点

 

    1.生产者、服务器和消费者都可分布式

 

    2.消息存储顺序读写

 

    3.性能极高,吞吐量大

 

    4.支持消息顺序

 

    5.客户端pull,随机读,批量拉数据

 

    6.数据迁移,扩容对用户透明

 

    7.消费状态保存在客户端

 

11.rabbitMQ

 

是一个在AMQP协议标准基础上完整的,采用Erlang实现的工业级的消息队列MQ服务器

 

12.rabbitMQ架构--运行原理

 

 

 

13.rabbitMQ重要术语

 

   1.sever(broker):接受客户端连接,实现AMQP消息队列路由功能的进程

 

   2.Virtual Host:其实是一个虚拟概念,类似于权限控制组,一个Virtual Host里面可以有若干个Exchange 和Quece,但是权限控制的最小粒度是Virtual Host

 

   3.Exchang:接受生产者发送的消息,并根据Binding规则江消息路由给服务器中的队列,Exchange Type 决定了Exchange路由消息的行为,例如:在Rabbitmq中,

 

        Exchange Type有direct ,fanout和topic三种,不用类型的exchange路由的行为是不一样的

 

   4.Message Queue:消息队列,用于存储还未被消费者消费的消息

 

   5.Message:由Header和Body组成,Header是由生产者添加的各种属性的集合,包括Message是否被持久化,由那个Message Queue接受,优先级是多少等,而Body是真正需要传输的APP数据

 

   6.Binding key:所谓绑定就是将一个特定的exchange 和一个特定的queue绑定起来,绑定关键字为bindinkey

你可能感兴趣的:(java)