您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

什么是消息松散耦合的异步通信过程?

2024/8/11 19:34:49发布25次查看
什么是消息
松散耦合的异步通信过程
1. 面向消息的中间件(mom): 消息发送者称为生产者; 存储消息的位置称为目的地; 接受消息的组件称为消费者
2. 消息模型: 
a. 点对点:目的地成为队列,消息只能被消费一次
b. 发布-订阅:目的地成为主体,消费者称为订阅者,消息能被任意数量消费
  java消息服务 1. jms api:提供使用java访问mom(消息中间件)的统一标准方式
2. 开发消息生产者流程:
a. 使用依赖注入,获得连接工厂connectionfactory和目的地destination对象
b. 使用连接工厂的createconnection打开连接connection
c. 使用连接connection的createsession创建会话session并指定事务参数
d. 使用会话session的createproducer创建货运队列producer
e. 使用会话session的createmessage创建消息message并设置
f. 使用货运队列producer的send发送消息
g. 释放资源
注意: 以上流程是基于javaee 6 的情况下, javaee 7 提供了更加简易的a开发流程
3. message接口: 消息头, 消息属性, 消息体; 实现类: objectmessage传递对象, bytemessage传递字节, mapmessage传递map, streammessage传递流数据, textmessage传递文字
消息驱动bean(mdb) 1. 优点:多线程,简化的消息代码
2. 设计原则: 
a. mdb类必须直接或间接实现消息监听器接口
b. 必须是具体的公开的,不能是final和抽象类
c. 必须是pojo,不能是另一个mdb的子类
d. 必须有无参的构造器
e. 不能有final方法
f. 不能抛出任何运行时异常,因为当抛出是mdb实例将被终止
3. 使用mdb开发消费者流程
a. 使用注解@messagedriven把类标记为mdb并且指定mdb配置
b. 实现messagelistener接口, 并实现onmessage方法
c. 在onmessage中实现逻辑
4. @messagedriven: 注解被注解的类为mdb, 该注解有3个参数, name指定mdb的名称, messagelistenerinterface指定mdb实现的消息接口(可以直接在类上implements接口), activationconfig用于指定专有的配置属性
5. messagelisener: 把mdb注册为消息消费者, 可根据不同场景实现不同监听器接口
6. activationconfigproperty: 配置消息系统的配置信息
a. destinationtype: 通知容器该mdb监听的是队列还是主题
b. connectionfactoryjndiname: 指定用于创建mdb的jms连接的连接工厂jdni
c. destianname: 指定正在监听的目的地
d. acknowledgemode: 指定jms会话确认模式
e. subscriptiondurability: 用于设置为持久订阅者
f. messageselector: 过滤消息
7. mdb生命周期:
a. 创建mdb实例并设置它们
b. 注入资源
c. 存放到受管理的池中
d. 当检测到消息到达时监听的目的地时,从池中取出空闲bean
e. 执行消息监听器方法,即onmessage方法
f. 当onmessage方法执行完毕,把空闲bean存回池中
g. 根据需求从池中撤销/销毁bean
8. 从mdb发送消息: 从jndi注入队列, 连接工厂对象, 然后和java消息一样的操作
9. 管理事务: 正常情况下, 在onmessage方法前开启事务, 方法结束时提交事务. 可以通过消息上下文对象rollback事务
mdb最佳实践 1. 根据使用情况选择是否使用mdb
2. 选择消息模型: 应在程序设计时决定是ptp还是发布-订阅, 但幸运的是, 两者间切换仅仅需要修改配置即可
3. 保持模块化: mdb的onmessage方法不应该处理业务逻辑, 业务逻辑应该放在对应的会话bean, 并注入mdb, mdb负责调用对应的会话bean
4. 根据场景充分使用过滤器或划分目的地
5. 选择消息类型: 根据使用场景选择传输时使用的消息类型
6. 警惕有毒消息: 无法消费但又回滚了的消息会陷入无限循环的接收/回滚中, 虽然个别厂商有自己的处理死消息的实现, 但是在编程的时候要注意
7. 配置mdb池额大小: 根据场景和需求配置
参考
ejb 3 in action, second edition
以上就是 什么是消息松散耦合的异步通信过程?的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product