• 0
  • 0
分享
  • Spring-Intergration简介与实例——软件测试圈
  • 曼倩诙谐 2021-08-30 10:12:52 字数 2848 阅读 1044 收藏 0

  一、Spring-Intergration 简介

  Spring-Intergration提供Spring编程模型的拓展,以支持EIP(nterprise Integration Patterns,企业集成模式)。在基于Spring的应用程序中支持轻量级的消息传递,支持通过适配器(Adapters)与外部系统集成。Spring-Intergration有以下目标:

  ·提供一个简单的模型来实现复杂的企业集成解决方案

  ·在基于Spring的应用程序中提供异步、消息驱动的行为

  ·激励Spring的现有用户直观、增量的使用Spring-Intergration

  二、Spring-Intergration组成

  Spring-Intergration 主要由Message、Message Channel、Message Endpoint几部分组成,接下载我们将分别对其进行简要介绍。

  Message:

  在Spring-Intergration中,Message是消息传输的载体,它由Header(消息头)和Payload(消息体)两部分组成。Payload中可以存放任何数据类型,Header中通常包含时间戳、信息ID、地址等常用信息。例如,当从一个文件创建Message时,文件名可以存放在Header中,具体的文件内容可以存放在Payload中。

1.png

图1.Message

  Message Channel:

  Message Channel(消息管道),生产者生产消息推送到channel,消费者从channel消费消息。因此,消息通道将消息传递组件解耦,并且还提供了一个方便的消息拦截和监视点。

1-.png

图2.Message Channel

  a)PublishSubscribeChannel:

  PublishSubscribeChannel将发送给它的任何消息广播到其所有订阅者,因为它没有实现PollableChannel,因此没有receive()方法,PublishSubscribeChannel仅能用于发送。

  b)QueueChannel:

  QueueChannel的内部实现包装了一个队列。与PublishSubscribeChannel不同,QueueChannel具有点对点的概念。换句话说,即使该通道有多个使用者,其中只有一个使用者可以接收发送到该通道的任何消息。如果队列已达到容量,发送方将阻塞,直到队列中有可用的空间或者队列中的消息被超时处理。

  c)PriorityChannel:

  PriorityChannel是QueueChannel先入先出的一种替代实现,它允许根据优先级在通道内对消息进行排序。

  d)RendezvousChannel:

  RendezvousChannel支持“direct-handoff”场景.。发送方会一直阻塞,直到另一方调用通道的receive()方法执行。或者接收方阻塞,直到发送方发送消息。

  e)DirectChannel:

  DirectChannel具有点对点含义,与PublishSubscribeChannel的不同之处在于,它将每个消息发送给单个订阅者的MessageHandler进行处理。

  f)ExecutorChannel:

  Executor通道是一个点对点管道,与DirectChannel不同点在于 Executor将委托给TaskExecutor的实例来执行调度。

  g)FluxMessageChannel:

  不同于上述管道,FluxMessageChannel既没有实现SubscribableChannel,也没有实现PollableChannel,因此只有org.reactivestreams.Subscriber的实例可从该通道中消费Message。

  h)ScopedChannel:

  通过对管道添加scope属性, 增加ThreadLocalChannel的功能。

  Message Endpoint:

  Message Endpoint(消息终端),消息处理的真正节点,接收消息管道发来的消息,处理完成后发送到对应的消息管道。

  Message Transformer:

  消息转换器负责转换消息的内容或结构,并返回修改后的消息。最常见的转换器类型可能是将消息的Payload从一种格式转换为另一种格式(例如从XML转换为java.lang.String)。类似地,转换器可以添加、修改或删除消息的Header内容。

  Message Filter:

  消息筛选器确定是否应将消息传递到输出通道。可以对Payload的类型、属性值、是否存在报头或其他条件进行筛选。如果消息被接受,它将被发送到输出通道。如果没有,它将被丢弃(也有可能会抛出异常)。

  Message Router:

  消息路由器负责决定哪个或者哪些通道应该接收消息。通常,基于Payload或者Header中的消息进行决策。

1-1.png

图3. Message Router

  Splitter:

  拆分器接收来自其输入通道的消息,将该消息拆分为多个消息,并将每个消息发送到其输出通道。

  Aggregator:

  聚合器基本上是拆分器的镜像,它是一种接收多条消息并将它们组合成一条消息的消息终端。

  Service Activator:

  服务激活器是将服务实例连接到消息传递系统的通用端点。必须配置输入消息通道,如果要调用的服务方法能够返回值,则还可以提供输出消息通道。

1-2.png

图4. Service Activator

  Channel Adapter:

  通道适配器是将消息通道连接到其他系统或传输的终端。通道适配器可以是入站或出站。通常,通道适配器在从另一个系统接收或发送到另一个系统的任何对象或资源(文件、HTTP请求、JMS消息等)之间进行一些映射。根据传输的不同,通道适配器还可以填充或提取Header中的值。

1-3.png

2.png

图5. Channel Adapter

  Endpoint Bean Names:

  消费终端由消费者和消息处理程序两个bean组成。消费者有一个对消息处理程序的引用,并在消息到达时调用它。

  三、Demo

  HelloWorldApp:

  HelloWorld应用程序演示了一个简单的消息流,如下所示:

1-4.png

  helloWorldDemo.xml:定义inputChannel,outputChannel(设置容量大小为10),activator(接收helloService里的sayHello方法)。

1-5.png

  HelloService.java:

1-6.png

  HelloWorldApp.java:

1-7.png

  输出结果:

1-8.png

  PollerApp:

  Poller应用程序每20秒打印两次当前系统时间。

  Delay.xml:

1-9.png

  PollerApp.java:

1-10.png



作者:王子浩   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   五一假期刚刚结束,大家都度过了疫情以来难得的休闲假期,但因大风天气频发,部分高铁线路出现线路悬挂异物,导致部分火车晚点运行,进而引起北京西站出现了大量旅客滞留的情况,引发了大家的关注。对于火车晚点,大家都能理解,但对于北京西站的处理方式和应急做法,民众就不见得理解了,大风刮飞地膜的事件不容易出,但相应的应急措施也需要预先想好。通过这个事件,联想起我们软件测试行业,哪些过程和活动是咱们需要提前想好应急措施的呢。  那么就跟着我来一起梳理梳理,那些可以提前想到的“地膜”事件,以及我们能够想到的应急措施,防止出现软件测试领域的“旅客滞留”现象。  拿一个传统的瀑布模型的信息系统来说,软件系统的生...
            11 12 1783
            分享
          •   波音公司本周三披露细节,称 2023 年 11 月公司遭到勒索软件攻击,黑客索要高达 2 亿美元(当前约 14.44 亿元人民币)的赎金,最终公司决定拒绝支付。  网络犯罪分子于 2023 年 10 月使用 LockBit 勒索软件平台,开始尝试攻击波音公司,于 11 月初窃取了大约 43GB 的公司机密文件,相关文件随后被发布到 LockBit 网站上。  波音公司拒绝向黑客支付赎金,表示黑客攻击影响了公司的全球服务业务部门和零部件部门,未对飞行安全造成影响。  网络安全公司 Emsisoft 的勒索软件分析师布雷特?卡洛(Brett Callow)表示:“这可能是目前黑客索要第二多的赎...
            0 0 603
            分享
          •   摘要:全链路生产压测,指的是模拟真实场景、使用多样化的流量请求进行全流程、全链路压力测试。传统的性能测试,测试环境资源数量、各链路硬件资源配置、配比与生产环境存在差异,且系统性能会受其他关联方的影响,单交易压测结果无法反映系统真实性能情况。而全链路生产压测可以找到系统的瓶颈点、发现系统潜在风险;有效评估系统的实际承载能力,指导调配服务资源、调整限流策略。  笔者结合自身参与的银行系统全链路生产压测实践经验,针对全链路生产压测的适用场景、风险及难点和解决方案进行了简述及分析,为全链路生产压测的解决方案提供参考。  1、全链路生产压测适用场景  全链路生产压测适用场景广泛,主要适用于以下四种场...
            15 15 2585
            分享
          •   背景  小Q近期在承接一个需求,该需求推进过程中出现了多类问题,测试过程还跨了周末,小Q在周报中提及了这个项目中的问题,自己也做了一些反思,其中几句如下:  “在一个项目中,QA有两个角色,一是作为项目推进者,尤其是跟测试有关的环节,另一个是作为QA角色。”Z哥发现需求测试过程明显出现卡点但是较晚才被反馈时候是这么说的。  在测试过程中,我更容易陷入第二个角色执行测试相关的动作、做bug的修复推进,而对项目的推进动作就做得比较少。  比如我理解,明确各方阻塞点、看清楚什么是当前最重要的问题、对于风险和边界的沟通协调、风险的分析和及时同步等等都是属于对项目的推进。  如果陷入项目测试的细节,...
            0 0 366
            分享
          •   微软在 2021 年收购了视频编辑器 Clipchamp 后,将其整合到 Microsoft 365 个人版和家庭版订阅中,最近还扩展到商业订阅。同时,Clipchamp 还推出了适用于非 Microsoft 365 订阅用户的独立高级版。  微软视频编辑工具 Clipchamp 迎来新功能:支持音频录制  今天,Office Insider 博客宣布了即将面向 Clipchamp 用户推出的几项新音频功能。其中一项功能允许用户直接在视频中插入录音。用户可以在应用程序的“录制和创建”选项卡中单击“音频”选项,然后开始录制长达 30 分钟的音频片段。录制完成后,他们可以在应用程序的时间轴中进...
            0 0 775
            分享
      • 51testing软件测试圈微信