位置: IT常识 - 正文

spring integration使用:消息转换器

编辑:rootadmin
spring integration使用:消息转换器 系列文章目录

推荐整理分享spring integration使用:消息转换器,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

…TODO spring integration开篇:说明 …TODO spring integration使用:消息路由 spring integration使用:消息转换器

spring integration使用:消息转换器系列文章目录前言消息转换器(或者叫翻译器)的概念二、translator在spring integration中的实现分为4个组件transformercontent enricherclaim checkcodec目标1.引入库2.码代码2.1.消息源2.2.定义渠道2.3.定义集成流2.4.定义用于处理分流过来消息(前缀为a的消息)集成流总结前言

本系列文章主要是通过一些实际项目场景举例,展开讲解spring integration对enterprise integration patterns的实现。个人能力所限,文中有不妥当或者错误的点还希望大家担待和指正。

文章的示例使用的都是java DSL风格代码,很多上下文都是通过使用Spring Expression Language (SpEL)来做的动作和内容,所以需要你对SpEL有一些了解,这个过程应该不会太长。

关于文章中使用的一些环境依赖和代码风格、约定,请看系列文章的开篇说明。

消息转换器(或者叫翻译器)的概念

在许多情况下,企业集成解决方案在现有应用程序(如遗留系统、打包应用程序、自行开发的自定义应用程序或由外部合作伙伴运营的应用程序)之间路由消息。这些应用程序中的每一个通常都是围绕专有数据模型构建的。每个应用程序对客户实体的概念可能略有不同,定义客户的属性以及客户与哪些其他实体相关。例如,会计系统可能对客户的纳税人 ID 号更感兴趣,而客户关系管理 (CRM) 系统存储电话号码和地址。应用程序的基础数据模型通常驱动物理数据库模式、接口文件格式或编程接口 (API) 的设计,这些实体是集成解决方案必须与之交互的。因此,应用程序期望接收模仿应用程序内部数据格式的消息。

除了各种应用程序中包含的专有数据模型和数据格式之外,集成解决方案通常还与寻求独立于特定应用程序的标准化数据格式进行交互。有许多联盟和标准机构定义了这些协议,例如RosettaNet,ebXML,OAGIS和许多其他行业特定的联盟。在许多情况下,集成解决方案需要能够使用“官方”数据格式与外部各方进行通信,而内部系统则基于专有格式。

使用不同数据格式的系统如何使用消息传递相互通信?

spring integration使用:消息转换器

在其他过滤器或应用程序之间使用特殊筛选器(消息转换器)将一种数据格式转换为另一种数据格式。

消息转换器是 [GoF] 中描述的适配器模式的消息传递等效项。适配器将组件的接口转换为另一个接口,以便可以在不同的上下文中使用。

在EIP中叫translator。

二、translator在spring integration中的实现分为4个组件

transformer:将源消息转换(翻译)为你指定的任意格式或者类型(比如XML转换为JSON)。 content enricher:动态扩充源消息的header或者payload内容,加字段之类的操作。 claim check:是一种消息传递机制,它可以解决消息体过大的问题,提高系统的可靠性和稳定性。 codec:编解码器对对象进行编码和解码。

transformercontent enricherheader enricherpayload enricherclaim check

Claim Check是一种消息传递机制,它可以解决消息体过大的问题,提高系统的可靠性和稳定性。

当消息体过大时,传输和处理这些消息会导致系统的性能下降。为了解决这个问题,Claim Check机制可以将消息体抽离出来,只传递消息的引用,而不是整个消息体。这样可以减少消息传输的数据量,提高传输效率。

在Claim Check机制中,消息的发送方将消息体存储到一个中央存储区域,然后只传递消息体的引用给接收方。当接收方需要处理消息时,它可以使用引用来检索消息体,然后对消息进行处理。

Claim Check机制的优点是可以降低系统的开销,同时可以提高系统的可靠性和稳定性。通过使用Claim Check机制,可以避免因为消息体过大导致的系统错误和性能下降的问题,从而提高系统的可维护性和可扩展性。

codec目标

通过对消息内容做判断将消息分流到不同的渠道中进行后续处理。

1.引入库

gradle

implementation 'org.springframework.boot:spring-boot-starter-integration' implementation 'org.springframework.integration:spring-integration-http' implementation 'org.springframework.integration:spring-integration-file'2.码代码2.1.消息源 public String getFeed() { RestTemplate restTemplate = new RestTemplate(); String forObject = restTemplate.getForObject("https://spring.io/blog.atom", String.class);// String forObject = restTemplate.getForObject("https://tuna.moe/feed.xml", String.class);// System.out.println(forObject); return forObject; }2.2.定义渠道 @Bean public MessageChannel prefixa(){ return new DirectChannel(); }2.3.定义集成流 @Bean public IntegrationFlow httpOutboundFlow() { return IntegrationFlows.fromSupplier(this::getFeed, c -> c.poller(Pollers.fixedRate(10000))) .channel(MessageChannels.direct()) .transform(Transformers.objectToString("UTF-8")) .split(s -> s.applySequence(false).delimiters(" ")) .<String>filter((p) -> p.length() < 10 && p.matches("\\b[\\w]{3,}\\b")) .channel(MessageChannels.direct()) .routeToRecipients(r->r .applySequence(true) .ignoreSendFailures(true) .defaultOutputChannel("nullChannel") .recipient("prefixa", "payload.startsWith('a')") ) .get(); }2.4.定义用于处理分流过来消息(前缀为a的消息)集成流 @Bean public IntegrationFlow printAFlow(){ return IntegrationFlows.from("prefixa") .handle(p->{ System.out.println("^^^^^^^^^^^^^^^" + p.getPayload()); }) .get(); }总结

…TODO。

本文链接地址:https://www.jiuchutong.com/zhishi/299695.html 转载请保留说明!

上一篇:提示工程师:如何高效的向ChatGPT提问对话(工程师模式有什么用)

下一篇:理解vuex实现的原理(vuex用法和原理)

  • 怎么在手机上查社保交了多少年(怎么在手机上查社保缴费记录)

    怎么在手机上查社保交了多少年(怎么在手机上查社保缴费记录)

  • 苹果怎么看全部历史的通话记录(苹果怎么看全部信息)

    苹果怎么看全部历史的通话记录(苹果怎么看全部信息)

  • vivo手机怎么关闭小v(vivo手机怎么关闭5g)

    vivo手机怎么关闭小v(vivo手机怎么关闭5g)

  • 小米ota卡有什么用(小米ota卡怎么样)

    小米ota卡有什么用(小米ota卡怎么样)

  • 电脑寿命大约多少年(电脑寿命多少年)

    电脑寿命大约多少年(电脑寿命多少年)

  • 微信密码泄露后会有什么后果(微信密码泄露后会有什么后果自己微信支付用不了)

    微信密码泄露后会有什么后果(微信密码泄露后会有什么后果自己微信支付用不了)

  • 手机一天充两次电有损害吗(手机一天充两次电会影响寿命吗)

    手机一天充两次电有损害吗(手机一天充两次电会影响寿命吗)

  • 钉钉回放可以保存多久(钉钉回放可以保留多久)

    钉钉回放可以保存多久(钉钉回放可以保留多久)

  • vivoz6是5g手机吗(vivoz6是多大尺寸)

    vivoz6是5g手机吗(vivoz6是多大尺寸)

  • 苹果4g变e怎么恢复(iphone的4g变成e咋回事)

    苹果4g变e怎么恢复(iphone的4g变成e咋回事)

  • 微信缷载后重新下载数据还有吗(微信缷载重新安装如何找回聊天记录)

    微信缷载后重新下载数据还有吗(微信缷载重新安装如何找回聊天记录)

  • 主板坏了能开机么(电脑开不了机是主板坏了吗)

    主板坏了能开机么(电脑开不了机是主板坏了吗)

  • 苹果ipadwlan和cellular是什么意思(苹果ipadwlan和cellular哪个好)

    苹果ipadwlan和cellular是什么意思(苹果ipadwlan和cellular哪个好)

  • 小米6的耳机孔在哪里(小米6的耳机插口)

    小米6的耳机孔在哪里(小米6的耳机插口)

  • 淘宝里的红包怎么提现(淘宝里的红包怎么使用)

    淘宝里的红包怎么提现(淘宝里的红包怎么使用)

  • 小米cc9pro下巴多宽(小米9下巴是几毫米)

    小米cc9pro下巴多宽(小米9下巴是几毫米)

  • 华为拨号界面壁纸设置(华为拨号界面壁纸怎么换)

    华为拨号界面壁纸设置(华为拨号界面壁纸怎么换)

  • 怎去掉华为屏幕上光圈(怎去掉华为屏幕上的圆点)

    怎去掉华为屏幕上光圈(怎去掉华为屏幕上的圆点)

  • 视频怎么拉长腿(抖音拍视频怎么拉长腿)

    视频怎么拉长腿(抖音拍视频怎么拉长腿)

  • ios12一键关闭所有程序(iphone 12 一键关闭所有应用)

    ios12一键关闭所有程序(iphone 12 一键关闭所有应用)

  • 小米6可以快充吗(小米6快充是多少瓦)

    小米6可以快充吗(小米6快充是多少瓦)

  • 解决TypeError: Cannot read properties of undefined (reading ‘NormalModule‘)的三种方案(解决的英文)

    解决TypeError: Cannot read properties of undefined (reading ‘NormalModule‘)的三种方案(解决的英文)

  • 报错“Cannot read properties of null (reading ‘addEventListener‘)“(报错500是什么意思)

    报错“Cannot read properties of null (reading ‘addEventListener‘)“(报错500是什么意思)

  • Opencv学习之:将图片的值进行范围调整 cv2.normalize()(opencv语句)

    Opencv学习之:将图片的值进行范围调整 cv2.normalize()(opencv语句)

  • 小规模纳税人报税时间
  • 3901100090的暂定税率
  • 休产假个人部分社保公司怎么做账
  • 小微企业第一季度不符合条件怎么处理
  • 留存收益未分配利润占比
  • 技术服务出口免关税政策
  • 因保管不善,不慎遗失
  • 交通费汇算清缴怎么做账
  • 托收承付销售货物什么意思
  • 增值税税负率怎么算
  • 已认证未抵扣发票冲红流程
  • 增值税季度报税
  • 纳税人提供植物油的税率
  • 如何区分纳税人和小规模纳税人
  • 成立公司工会
  • 股东以股抵债是否合法
  • 个人所得税成本费用怎么算
  • 纳税人申领发票流程
  • 计提汽车折旧会计分录
  • 即征即退和先征后退适用范围
  • 出纳违规支付承担啥责任?
  • 水利基金减免怎么做账
  • 开出去的发票没有进项发票应怎么核算成本?
  • php循环语句
  • php中字符串函数
  • 长期借款和应付利息
  • 商业折扣影响税费吗
  • 存货盘亏能否税前扣除
  • 客户预付款了尾款怎么办
  • 非营利组织企业所得税免税收入
  • 建设工程劳务分包合同属于建设工程合同吗
  • 前端段落空两格怎么设置
  • 北坡镇人民政府
  • vuecli3创建项目的过程
  • vue中过滤器有什么作用及详解
  • uniapp怎么引入elementui
  • wordpress使用教程
  • 结转成本 凭证
  • 企业多久报一次工伤保险
  • 出口退税方法相关文献
  • 如何用织梦在本地搭建网站
  • 三方转账协议各方怎么记账
  • 单一窗口退税数据发送
  • 采购货物没有发票开出去有发票有什么风险
  • 企业做账会计分录流程
  • sql 语法树
  • SQL Server 2005/2008 导入导出数据常见报错解决方法
  • 什么叫生活补助
  • 一般纳税人建筑劳务税率
  • 公司收到服务费要交哪些税
  • 外币支付账户
  • 应交税费借方是增加还是减少
  • 应发工资计入什么科目
  • 现代服务业营改增
  • 购建固定资产属于投资活动吗
  • 安全生产责任险是强制险吗
  • 公司成本核算流程
  • mysql 5.6新特性
  • mysql常用关键字及其用法
  • 在基于Xen的CentOS系统VPS上配置PPTP VPN的教程
  • win7系统怎么删除
  • win8系统本地连接在哪
  • WinCfg32.exe - WinCfg32是什么进程
  • macos如何新建文件
  • CoverDesigner.exe是一个安全进程吗 CoverDesigner进程查询
  • ControlSet001、ControlSet002以及CurrentControlSet之间有什么区别
  • win8开始界面如何设置成win7
  • win8wifi设置在哪
  • win10资源管理器启动不了
  • 安卓注入工具
  • unity总结
  • 批处理文本文件如何建立
  • linux shell -s
  • python字符串常用的五种方法
  • jquery ztree选中节点颜色
  • js知识总结
  • js扩展名是什么文件
  • 怎么设置python前面序号
  • 实际金额与报关金额不符
  • 重庆税务总局发票查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设