spring integration使用:消息路由

news2024/11/17 17:36:01

系列文章目录

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


spring integration使用:消息路由

  • 系列文章目录
  • 前言
  • 消息路由的概念
  • 二、路由的分类
    • 基于内容的路由器
      • spring integration中的实现
        • RecipientListRouter
        • ...TODO
    • 动态路由器
  • 三、基于内容的路由器使用示例
    • 目标
    • 1.引入库
    • 2.码代码
      • 2.1.消息源
      • 2.2.定义渠道
      • 2.3.定义集成流
      • 2.4.定义用于处理分流过来消息(前缀为a的消息)集成流
  • 总结


前言

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

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


消息路由的概念

如何分离各个处理步骤,以便可以根据一组条件将消息传递到不同的筛选器?

在这里插入图片描述

插入一个特殊的过滤器,即消息路由器,该过滤器使用来自一个消息通道的消息,并根据一组条件将其重新发布到另一个消息通道通道。

消息路由器与管道和过滤器的最基本概念不同,因为它连接到多个输出通道。由于管道和过滤器体系结构,消息路由器周围的组件完全不知道消息路由器的存在。消息路由器的一个关键属性是它不修改消息内容。它只关心消息的目的地。

二、路由的分类

基于内容的路由器

spring integration中的实现

RecipientListRouter

通过自定义规则将收到的每条消息发送到静态定义的消息通道列表。

…TODO

动态路由器

三、基于内容的路由器使用示例

目标

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

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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/186133.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python property()函数:定义属性

我们一直在用“类对象.属性”的方式访问类中定义的属性&#xff0c;其实这种做法是欠妥的&#xff0c;因为它破坏了类的封装原则。正常情况下&#xff0c;类包含的属性应该是隐藏的&#xff0c;只允许通过类提供的方法来间接实现对类属性的访问和操作。因此&#xff0c;在不破坏…

AOP的四种增强方式

1. 前置增强&#xff0c;在核心功能之前执行的额外功能 public class MyBeforeAdvice implements MethodBeforeAdvice{Overridepublic void before(Method arg0, Object[] arg1, Object arg2) throws Throwable {System.out.print("this is my before advice!");Str…

渲染函数render

文章目录节点、树以及虚拟 DOM树节点虚拟 DOMvue中render函数的作用render函数去创建子组件内容createElement官方文档参考节点、树以及虚拟 DOM 在深入渲染函数之前&#xff0c;了解一些浏览器的工作原理是很重要的。以下面这段 HTML 为例&#xff1a; <div><h1>…

user-select:none真的能禁止文本的复制粘贴吗?

1. 前言 面向搜索引擎开发时&#xff0c;我们经常看到这样的情况&#xff1a;登录后复制。 由于设置了css属性 user-select:none&#xff0c;此时鼠标无法实现选中文本&#xff0c;也就无法复制文本&#xff0c;通常会采用这种方式来禁止复制文本。打开开发者工具-审查元素&am…

k-means聚类

一、概述 当前人工智能技术实现的一种主要手段是机器学习&#xff0c;而机器学习能够解决的问题主要有三种&#xff1a;分类、聚类、回归&#xff0c;有监督的是分类&#xff0c;无监督的是聚类。所谓聚类&#xff0c;就是以一定的方法将一堆样本依它们本身的数据特性划分成不同…

docker安装mongdb

MongoDB是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。它支持的数据结构非常松散&#xff0c;是类似json的bson格式&#xff0c;因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非…

【操作系统】备忘录

进程上下文切换 用户态、内核态 内核态&#xff1a;也叫内核空间&#xff0c;是内核进程/线程所在的区域。主要负责运行系统、硬件交互。 用户态&#xff1a;也叫用户空间&#xff0c;是用户进程/线程所在的区域。主要用于执行用户程序。 内核态与用户态的区别 内核态与用户…

spring mvc文档阅读笔记——02

目录标题一、Asynchronous Requests&#xff08;异步请求&#xff09;&#xff08;一&#xff09;阻塞和非阻塞,同步和异步&#xff08;二&#xff09;DeferredResult&#xff08;三&#xff09;Callable二、跨域请求CORS&#xff08;一&#xff09;实现跨域请求的方式&#xf…

数据持久化-RDB-AOF

定义 将数据从掉电易失的内存放到永久储存的设备上 因为所有的数据都在内存是&#xff0c;所有必须得持久化 redis提供两种持久化方案 RDB默认开启、AOF RDB 1,保存真是的数据 2&#xff0c;将服务器包含的所有数据库数据以二进制文件形式保存到磁盘里面 3&#xff0c;默认…

JDBC管理事务

基本介绍 就是处理在mysql的事务 复习一下:事务是一组sql语句需要开启和提交&#xff0c;事务中的sql语句要么全部生效&#xff0c;要么全部不生效&#xff0c;提交之后就是全部生效&#xff0c;中间可以设置保存点&#xff0c;回退到保存点&#xff0c;或直接回退到最开始事务…

1.2.1存储结构:层次化存储结构、外存(辅存)、内存(主存)、CPU内部的寄存器、Cache(相联存储器)

1.2.1存储结构&#xff1a;层次化存储结构、外存&#xff08;辅存&#xff09;、内存&#xff08;主存&#xff09;、CPU内部的寄存器、Cache&#xff08;相联存储器&#xff09;存储系统--层次化存储结构外存&#xff08;辅存&#xff09;内存&#xff08;主存&#xff09;CPU…

并发编程学习(八):ReentrantLock

ReentrantLock 是java.util.concurrent.locks包下的类。相对于synchronized,它具备如下特性&#xff1a;可中断。可以设置超时时间。可以设置公平锁。支持多个条件变量。即可以有个多个waitset等待队列。与synchronized都支持可重入。ReentrantLock的基本语法&#xff1a;// 获…

数学建模相关竞赛零基础上手与入门介绍

文章目录1、赛事介绍与报名2、学习与训练2.1 比赛题目选择范围2.2 赛前组队与分工2.3 比赛时间分配1、赛事介绍与报名 什么是数学建模&#xff1f; 定义&#xff1a; 生活中的各种问题(如股票预测、火灾报警统计等)&#xff0c;运用数学的方式去阐述并解决它。 数学建模赛事 …

cisp证书含金量怎么样?值不值得考?

这是CISP考试报名条件参考&#xff1a; 成为CISP&#xff0c;必须满足以下基本要求&#xff1a; 申请CISE、CISO注册资质&#xff0c;需满足以下教育和工作经验要求&#xff1a; &#xff08;1&#xff09;教育和工作经历要求&#xff1a;硕士及硕士以上学历&#xff0c;具备…

LabVIEW在实时目标上使用文件路径

LabVIEW在实时目标上使用文件路径文件路径和结构因目标操作系统而异。本文档讨论了推荐的LabVIEW编码实践&#xff0c;用于指定文件路径&#xff0c;以便应用程序可以无缝地从目标移动目标。实时操作系统选项所有NI实时控制器运行三种不同的操作系统之一&#xff0c;即PharLap、…

Find My资讯|美国航班取消,出行者疯狂购买苹果AirTag追踪行李箱

美国西南航空&#xff08;Southwest Airlines Co.&#xff09;由于所使用的 SkySolver 系统在圣诞假期间崩溃&#xff0c;导致航班出现大面积延误或取消&#xff08;大约 13000 个航班受到影响&#xff09;&#xff0c;让公司损失超过 8 亿美元&#xff08;当前约 53.76 亿元人…

5.kafka--生产调优

文章目录Leader Partition负载均衡消费者初始化流程消费者再平衡生产者和消费者如何提高吞吐量如何发送大消息Leader Partition负载均衡 参数名称描述auto.leader.rebalance.enable默认是true。自动LeaderPartition平衡。生产环境中&#xff0c;leader重选举的代价比较大&…

ADB快速入门

ADB快速入门 一、 简介 Android Debug Bridge&#xff0c;我们一般简称为adb&#xff0c;主要存放在sdk安装目录下的platform-tools文件夹中&#xff0c;它是一个非常强大的命令行工具&#xff0c;通过这个工具用来连接电脑和Android设备&#xff08;手机、电脑、电视、平板、…

LIO-SAM代码解析——imuPreintegration.cpp

目录imuPreintegration.cpp1. TransformFusion 类1.1. lidarOdometryHandler1.2. imuOdometryHandler2. IMUPreintegration 类2.1. imuHandler2.2. odometryHandler⭐2.2.1. 初始化系统, 把初始的lidar位姿&#xff0c;速度&#xff0c;零偏加入到因子图中2.2.2. 将两帧之间的i…

【深度学习】简述CNN分类网络的演变脉络及各自的贡献与特点

问题 简述CNN分类网络的演变脉络及各自的贡献与特点 综述 深度学习的浪潮就是从CNN开始的,它结构形态的变化也见证着这门技术的发展。现在涌进来学习深度学习的大部分人都是做计算机视觉的,因为这个门槛相对较低,业界数据集开源了很多,也比较直观,而且对硬件设备的要求…