消息中间间初识

消息中间件认识

消息中间件是指一类软件,是基于分布式处理的软件,最突出的特点是其网络通信功能

也可认为中间件是位于平台和应用之间的通用服务,这些服务具有标准的程序接口和协议。针对不同的操作系统和硬件平台,可以有符合接口和协议的多种实现

消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,可以在分布式环境下扩展进程间的通信.

消息中间件可以即支持同步方式,又支持异步方式。异步中间件比同步中间件具有更强的容错性,在系统故障时可以保证消息的正常传输,异步中间件技术又分为两类:广播方式和发布/订阅

方式。由于发布/订阅方式可以指定哪种类型的用户可以接受哪种类型的消息,更加有针对性,

为什么要使用 ?作用场景

越来越多的企业面临着各种各样的数据集成和系统整合,基于消息的异步处理模型采用非阻塞的调用特性,发送者将消息发送给消息服务器,消息服务器在合适的时候再将消息转发给接收者;

发送和接收是异步的,发送者无需等待,二者的生命周期也可以不必相同,而且发送者可以将消息间接传给多个接收者,大大提高了程序的性能、可扩展性及健壮性,这使得异步处理模型在

分布式应用上比起同步处理模型更具有吸引力。

中间件在操作系统软件,网络和数据库之上,应用软件之下,总的作用是为处于自己上层的应用软件提供运行于开发的环境,帮助用户灵活、高效的开发和集成复杂的应用软件。

优缺点

灵活  在各个应用程序进程中灵活的消息传递,以及对消息持久化处理等

不足就是消息中间件对消息传递还是有不足 如在消息传送失败的时候,重新发送时发送顺序,以及发送的时间效应还存在不足

总的来说,中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少了程序设计的复杂性,将注意力集中与自己的业务上,不必再为程序在不同软件系统

上的移植而重复工作,从而大大减少了技术上的负担。

实现原理

两个应用程序之间通过消息中间件进行消息传递

自己思考的消息中间件问题

流程

消息发布者发送消息到消息中间件,即messageserver通过messageserver对消息的保持处理再发送回执和消息发布者,完成后再与订阅者也就是消息接收者通讯,messageserver投递消息给订

阅者

发布者发送消息到message server,当message server收到消息,首先保存消息,然后发送成功响应给发布者,这样正常情况下发布者会收到message的回执

发送失败时

当网络异常时(网络中断,或者网络延迟),此时messageserver和消息还没有任何关系,发布者会收到发送失败的回执(message client发的,即发布者底层的message依赖的jar包中的网络层

,message client和message server建立socket连接后才可能发送消息),消息投递成功,这个时候发布者的业务处理代码可以根据这个发送失败的回执进行相应的处理:继续发送消息或者忽

略.

当发布者发送消息给message server,message server保存消息时有问题的话,message server会发送一个失败的回执给发布者,此时如果回执发送给发布者的时候,网络异常,这个时候在

发布者这端的message client是有超时设置的,当超时一段时间没有接收到回执消息的时候,message client就认定此次发送是失败了,自己生产失败消息返回给业务代码,再由发布者自行

处理怎么操作。

message server投递给订阅者时,发送不成功的话,message server有超时处理的,超时后会重新发送,重试的策略是时间间隔越来越长的,所以先到达message server的消息不一定在后到

达的消息前面被投递成功。

message server投递给订阅者时,发送成功了,但是订阅者业务处理失败,发送失败回执或者订阅者发送成功回执时网络异常(比如超时)了,message server会认为发送失败,这样就会重

新发送

常用的几种,每种的区别

JMS

jms提供者:连接面向消息中间件的,JMS接口的一个实现。提供者可以是Java平台的JMS实现,也可以是非Java平台的面向消息中间件的适配器。

jms客户:生产或消费基于消息的Java的应用程序或对象。

jms生产者:创建并发送消息的JMS客户。

jms消费者:接收消息的JMS客户。

jms消息:包括可以在JMS客户之间传递的数据的对象

jms队列:一个容纳那些被发送的等待阅读的消息的区域。队列暗示,这些消息将按照顺序发送。一旦一个消息被阅读,该消息将被从队列中移走。

jms主题:一种支持发送消息给多个订阅者的机制。

 JMS消息中间件的应用部署一般都是主备两个Server,消息的发送和接收应用平时和主Server相连,有问题时切换到备 Server,主备Server共用公共的存储设备来保存消息。

jms接收端主动接收消息, JMS 消息中间件在 IP 层使用点对点的一对一传输方式

JMS已知的典型应用场景是异步发送邮件

消息队列

消息发送者把需要发送的消息存放在一个容器内,再保存到系统共用空间的消息队列中,本地或异地的消息接收者再从这个队列中去取相应的消息。

消息队列包括有消息队列接口,消息队列管理器,消息队列,消息通道,安全管理

消息包括消息头,消息属性和消息体

消息头包括消息发送目标对象名称,消息发送模式,消息优先级,消息生命期,消息标识等

消息属性则是标准特定于供应商或者特定去程序的可选消息信息,常用于消息的过滤

消息体包含要发送接收者的内容,字节流信息,映射消息,java对象消息,文本消息等

消息发送模式,点对点和订阅模式

点对点:多个发送者,但是只有一个接收者   即多进一出

订阅模式:支持离线发送,定义消息主题,则预定了该主题的接受者都能接收。

时间: 2024-10-24 02:19:50

消息中间间初识的相关文章

对分布式事务、消息队列的重新认识

本质上问题可以抽象为:当一个表数据更新后,怎么保证另一个表的数据也必须要更新成功.若两张表在同一个数据库实例中,则使用本地事务就好了.否则可以采用分布式事务,或者消息队列. 前阵子从支付宝转账1万块钱到余额宝,这是日常生活的一件普通小事,但作为互联网研发人员的职业病,我就思考支付宝扣除1万之后,如果系统挂掉怎么办,这时余额宝账户并没有增加1万,数据就会出现不一致状况了. 上述场景在各个类型的系统中都能找到相似影子,比如在电商系统中,当有用户下单后,除了在订单表插入一条记录外,对应商品表的这个商品

消息总线的应用场景

应用场景 分布式事务 分布式系统组件相互通信 数据复制 日志同步 delay queue 广播通知 介绍 消息总线是一种通信工具,可以在机器之间互相传输消息.文件等. 消息总线扮演着一种消息路由的角色,拥有一套完备的路由机制来决定消息传输方向.发送段只需要向消息总线发出消息而不用管消息被如何转发,为了避免消息丢失,部分消息总线提供了一定的持久化存储和灾备的机制. [多机房同步方案] 通过消息广播方式将数据多点分布 数据提交给一个代理,这个代理帮我们把这些数据同步到多个机房,那我们应用不需要关心这

分布式事务消息队列的应用

前阵子从支付宝转账1万块钱到余额宝,这是日常生活的一件普通小事,但作为互联网研发人员的职业病,我就思考支付宝扣除1万之后,如果系统挂掉怎么办,这时余额宝账户并没有增加1万,数据就会出现不一致状况了. 上述场景在各个类型的系统中都能找到相似影子,比如在电商系统中,当有用户下单后,除了在订单表插入一条记录外,对应商品表的这个商品数量必须减1吧,怎么保证?!在搜索广告系统中,当用户点击某广告后,除了在点击事件表中增加一条记录外,还得去商家账户表中找到这个商家并扣除广告费吧,怎么保证?!等等,相信大家或

用消息系统实现分布式事务的简单设想

前阵子从支付宝转账1万块钱到余额宝,这是日常生活的一件普通小事,但作为互联网研发人员的职业病,我就思考支付宝扣除1万之后,如果系统挂掉怎么办,这时余额宝账户并没有增加1万,数据就会出现不一致状况了. 上述场景在各个类型的系统中都能找到相似影子,比如在电商系统中,当有用户下单后,除了在订单表插入一条记录外,对应商品表的这个商品数量必须减1吧,怎么保证?!在搜索广告系统中,当用户点击某广告后,除了在点击事件表中增加一条记录外,还得去商家账户表中找到这个商家并扣除广告费吧,怎么保证?!等等,相信大家或

如何用消息系统避免分布式事务?

前阵子从支付宝转账1万块钱到余额宝,这是日常生活的一件普通小事,但作为互联网研发人员的职业病,我就思考支付宝扣除1万之后,如果系统挂掉怎么办,这时余额宝账户并没有增加1万,数据就会出现不一致状况了. 上述场景在各个类型的系统中都能找到相似影子,比如在电商系统中,当有用户下单后,除了在订单表插入一条记录外,对应商品表的这个商品数量必须减1吧,怎么保证?!在搜索广告系统中,当用户点击某广告后,除了在点击事件表中增加一条记录外,还得去商家账户表中找到这个商家并扣除广告费吧,怎么保证?!等等,相信大家或

Java消息服务

Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信. Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持. 消息中间件的传递模式                   消息中间件一般有两种传递模型:点对点模型(PTP)和发布-订阅模型(Pub/Sub)[2].             点对点模型(PTP) 点对点模型用

如何用消息系统避免分布式事务

前阵子从支付宝转账1万块钱到余额宝,这是日常生活的一件普通小事,但作为互联网研发人员的职业病,我就思考支付宝扣除1万之后,如果系统挂掉怎么办,这时余额宝账户并没有增加1万,数据就会出现不一致状况了. 上述场景在各个类型的系统中都能找到相似影子,比如在电商系统中,当有用户下单后,除了在订单表插入一条记录外,对应商品表的这个商品数量必须减1吧,怎么保证?!在搜索广告系统中,当用户点击某广告后,除了在点击事件表中增加一条记录外,还得去商家账户表中找到这个商家并扣除广告费吧,怎么保证?!等等,相信大家或

[转]如何使用消息系统避免分布式事务?

文章来源:伯乐在线-占利军 原文地址:http://blog.jobbole.com/89140/ 前阵子从支付宝转账1万块钱到余额宝,这是日常生活的一件普通小事,但作为互联网研发人员的职业病,我就思考支付宝扣除1万之后,如果系统挂掉怎么办,这时余额宝账户并没有增加1万,数据就会出现不一致状况了. 上述场景在各个类型的系统中都能找到相似影子,比如在电商系统中,当有用户下单后,除了在订单表插入一条记录外,对应商品表的这个商品数量必须减1吧,怎么保证?!在搜索广告系统中,当用户点击某广告后,除了在点

如何用消息系统避免分布式事务?(转)

http://www.cnblogs.com/LBSer/p/4715395.html 前阵子从支付宝转账1万块钱到余额宝,这是日常生活的一件普通小事,但作为互联网研发人员的职业病,我就思考支付宝扣除1万之后,如果系统挂掉怎么办,这时余额宝账户并没有增加1万,数据就会出现不一致状况了. 上述场景在各个类型的系统中都能找到相似影子,比如在电商系统中,当有用户下单后,除了在订单表插入一条记录外,对应商品表的这个商品数量必须减1吧,怎么保证?!在搜索广告系统中,当用户点击某广告后,除了在点击事件表中增