push类型消息中间件-消息发布者(二)
1.消息发布者声明
我们以spring的方式来声明一个消息发布者:
<bean id="operateLogsMessageManager" class="com.taobao.hsf.notify.client.NotifyManagerBean" init-method="init">
<property name="name" value="ECRM-OPERATE_LOGS-NOTIFY" />
<property name="description" value="ECRM-OPERATE_LOGS-NOTIFY" />
<property name="publishTopics">
<list>
<value>OPERATE-LOGS</value>
</list>
</property>
<property name="groupId" value="P-ECRM-OPERATE_LOGS-NOTIFY" />
<property name="messageListener" ref="messageListener" />
<property name="checkMessageListener" ref="checkMessageListener" />
</bean>
- 消息发送者与订阅者都是NotifyManagerBean实例,发布者只关注topic和group
- group信息在发送者和订阅者之间是唯一的。
- messageListener 和 checkMessageListener 对于发送者来说不是必须的。
- 消息类型对于发送者来说是可以支持多种的。
2.消息订阅者实例化
消息发布者实例化的流程与订阅者类似,由于 publisher 中的 bindingCollector 为空,所以接下来不会有任何操作。同样的,resetPublisherTopics() 方法是为 publisher 量身定做的,publisher 会与 notify server 建立连接,记录下配置好的topic。
3.消息的发送与事务管理
消息发送基本流程
- 同步发送非事务消息:消息在发送未返回之前同步等待。
- 同步发送事务消息:发送消息未返回之前同步等待, NotifyManagerBean需要注册事务回调监听,CheckMessageListener, 支持事件回顾或提交,消息在未提交之前不会发给订阅者。
- 异步发送非事务消息:消息发送后无需同步等待。
- 异步发送事务消息:消息发送后无须同步等待,消息发送后支持消息的回滚戒提交,消息为提交之前不会发给订阅者。
- 使用可靠异步发送非事务消息:消息发送后暂时存在本地,由后台 线程从本地发给Notify服务器,Notify挂掉戒者网络不通都不会影响发 送端,Notify戒者网络恢复后消息会重试发给Notify服务器。
- 可靠异步发送事务消息:消息发送后暂时存在本地,Notify服务器 挂掉戒者网络暂时不通都不会影响消息的发送,消息发送支持事务提 交戒者回滚,消息为提交之前不会发给订阅者。
事务消息的基本流程
当业务处理超时,对于这种half消息的处理方式如下:server 是定时扫描 half 消息,如果长时间没有接收到 commit/rollback,那么 server 会主动向 publisher 发送一条 check 消息,让 publisher 告诉它该怎么处理。publisher 应该注册一个 CheckMessageListener 来接收 server 发送过来的 check 消息,
SendResult包含了消息的发送状态,同时也包含了业务执行的结果 在model属性中。
题外话:
基于回调函数实现业务A和业务B的同步调用
参考示例:https://github.com/zhulongchao/ali.git
push类型消息中间件-消息发布者(二)的更多相关文章
- push类型消息中间件-消息订阅者(一)
1.订阅者的声明方式 我们以spring组件化的方式,声明一个消息订阅者,对于消息订阅者关心的主要有: topic: 一级消息类型(又名消息主题).如TRADE 消息类型:二级消息类型,区别同一Top ...
- pull类型消息中间件-消息发布者(一)
消息集群架构 对于发送方来说的关键几要素 topic 消息的主题,由用户定义.类似于知乎的话题,Producer发送消息的时候需要指定发送到某一个topic下面,Consumer从某一个topic下面 ...
- pull类型消息中间件-消息消费者(二)
消费者的实例化 关于consumer的默认实现,metaq有两种: DefaultMQPullConsumer:由业务方主动拉取消息 DefaultMQPushConsumer:通过业务方注册回调方法 ...
- push类型消息中间件-消息服务端(三)
1.连接管理 网络架构原来是使用是自己开发的网络框架Gecko,Gecko默认为每个网络连接分配64KB的内存,支持1000个网络连接,就需要大概64MB的内存.后来采用Netty重构了网络服务层. ...
- pull类型消息中间件-消息服务端(三)
部署架构 消息存储 存储结构 MetaQ的存储结构是一种物理队列+逻辑队列的结构.如下图所示: Producer生产消息,根据消息的topic选择topic对应某一个分区,然后发送到这个分区对应的Br ...
- spring参数类型异常输出(二), SpringMvc参数类型转换错误输出(二)
spring参数类型异常输出(二), SpringMvc参数类型转换错误输出(二) >>>>>>>>>>>>>>&g ...
- AspNetWebApi管线中如果定义两种类型的消息处理程序(全局/路由)
AspNetWebApi管线中如果定义两种类型的消息处理程序(全局/路由) 在AspNetWebApi管线中存在两种类型的消息处理程序(Message Handler) 1.全局消息处理程序,所有的请 ...
- SIP消息类型和消息格式
转自:http://blog.chinaunix.net/uid-1797566-id-2840904.html sip消息类型和消息格式 SIP是一个基于文本的协议,使用的是UTF-8字符集. SI ...
- Android push推送消息到达成功率优化
Android push推送消息到达成功率优化 问题:server向client发送消息.未考虑client是否在线,这种消息到达率是非常低的. 第一次优化:使用server离线缓存数据,推断假设cl ...
随机推荐
- printf输出格式
tips:#为空格 Printf 格式化字符串 格式代码 A ABC ABCDEFGH %S A ABC ABCDEFGH %5S ...
- ActiveMQ的简单例子应用
ActiveMQ是一种消息中间件,它实现了JMS规范,提供点对点和订阅-发布两种模式.下面介绍下ActiveMQ的使用: 一.环境的搭建 首先我们需要下载ActiveMQ的安装包,下载地址http:/ ...
- 实战ASP.NET访问共享文件夹(含详细操作步骤)
博客园找找看(http://zzk.cnblogs.com)的索引文件占用空间太大,需要移至另外一台服务器,所以要解决"在ASP.NET中通过共享文件夹访问索引文件"的问题. 假设 ...
- springmvc框架下ajax请求传参数中文乱码解决
springmvc框架下jsp界面通过ajax请求后台数据,传递中文参数到后台显示乱码 解决方法:js代码 运用encodeURI处理两次 /* *掩码处理 */ function maskWord( ...
- IIS 发布程序,无法输出EXCEL 问题处理
[解决方案1] 1:在服务器上安装office的Excel软件. 2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务&quo ...
- Beego学习笔记——Logs
日志处理 这是一个用来处理日志的库,它的设计思路来自于database/sql,目前支持的引擎有file.console.net.smtp,可以通过如下方式进行安装: go get github.co ...
- laravel-1 安装.配置
听说laravel一直是一个很牛B的框架,之前接触过tp ci 也还只是一个小白,具体的核心没搞过,但对于我来说,框架都是拿来用的,会用即可. 以下内容为观看视频和自己查看资料后的整理,方便大家和自己 ...
- 3.使用secureCRT连接PC,LINUX,开发板
1.设置secureCRT(可选项):http://www.linuxyw.com/linux/gongxiang/20130505/161.html 2.使用secureCRT远程登录linux 3 ...
- 嵌入式系统基础知识(一): 系统结构和嵌入式Linux
目录 一. 嵌入式体系结构 二. 开发过程中的分工 三. 嵌入式软件体系结构 四. 嵌入式Linux 一. 嵌入式体系结构 <嵌入式系统设计师教程>这本书的前三章脉络很清晰, 按照嵌入式系 ...
- [Q]无矩形外框块参照图形的识别
该图纸的图框由块参照组成,其外侧图框不是矩形 使用默认设置无法正确识别,需要做以下修改:不勾选“块/外部参照”,勾选“块/外部参照边界”,勾选“制定块”并选择图框(块参照).