当前位置: 首页 > article >正文

Spring-messaging-MessageHandler接口实现类ServiceActivatingHandler

ServiceActivatingHandler实现了MessageHandler接口,所以它是一个MessageHandler,在spring-integration中,它也叫做服务激活器(Service Activitor),因为这个类是依赖spring容器BeanFactory的,所以在这里我不能直接使用硬编码的方式通过main方法直接构造ServiceActivatingHandler,而是使用@ServiceActivator注解配合spring

ServiceActivatingHandler类

这个类重要的一点就是允许带有返回值,如果有返回值,则需要配置一个输出通道,将这个返回值,通过该输出通道,传递到下一步(也可以通过该通道传递给发送者)

导入的包

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.config.EnableIntegration;
import org.springframework.integration.handler.ServiceActivatingHandler;
import org.springframework.messaging.*;
import org.springframework.messaging.support.GenericMessage;

代码示例:A发送消息->B接收方处理->B返回值->A处理返回值

下面的代码演示了A发送给B,B处理,又返回给A,A再处理,非常类似一次HTTP请求

@Configuration
@EnableIntegration
public class E5ServiceActivatingHandler {// 创建一个通道,用这个通道给B(messageHandler方法)发消息@Beanpublic SubscribableChannel inputChannel(){return new DirectChannel();}// B收到消息之后,如何处理,注意inputChannel 和 outputChannel @ServiceActivator(inputChannel = "inputChannel", outputChannel = "outputChannel")public String messageHandler(Message<String> msg) throws InterruptedException {System.out.println("收到入参了:" + msg.getPayload());Thread.sleep(10000);// 收到消息并处理完成之后,返回给发送方A一个返回值return "只买特斯拉";}// B返回给发送方A返回值是通过这个通道发送的@Beanpublic SubscribableChannel outputChannel(){return new DirectChannel();}public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(E5ServiceActivatingHandler.class);// 获取返回通道,接收方B的返回值会通过该通道发给发送方ASubscribableChannel outputChannel = context.getBean("outputChannel", SubscribableChannel.class);// 发送方A如何处理B的返回值,这里我们通过MyHandler类outputChannel.subscribe(new MyHandler());// 获取输入通道,发送方A通过该通道,将入参给BSubscribableChannel inputChannel = context.getBean("inputChannel", SubscribableChannel.class);// 创建发送方A的入参,参数内容为:"坚决不买国产新能源"Message<String> message = new GenericMessage<>("坚决不买国产新能源");// A发送给BinputChannel.send(message);}// 这个类决定A收到B的返回值之后如何处理这个返回值public static class MyHandler implements MessageHandler {@Overridepublic void handleMessage(Message<?> message) throws MessagingException {System.out.println("对方返回值:" + message.getPayload());}}}

相关文章:

Spring-messaging-MessageHandler接口实现类ServiceActivatingHandler

ServiceActivatingHandler实现了MessageHandler接口&#xff0c;所以它是一个MessageHandler&#xff0c;在spring-integration中&#xff0c;它也叫做服务激活器&#xff08;Service Activitor&#xff09;&#xff0c;因为这个类是依赖spring容器BeanFactory的&#xff0c;所…...

asp.net core api RESTful 风格控制器

在 ASP.NET Core API 中&#xff0c;遵循 RESTful 风格的控制器一般具备以下几个关键特征&#xff1a; ✅ RESTful 风格控制器的命名规范 控制器命名 使用 复数名词&#xff0c;表示资源集合&#xff0c;如 ProductsController、UsersController。 路由风格 路由使用 [Rout…...

【甲方安全建设】Python 项目静态扫描工具 Bandit 安装使用详细教程

文章目录 一、工具简介二、工具特点1.聚焦安全漏洞检测2.灵活的扫描配置3.多场景适配4.轻量且社区活跃三、安装步骤四、使用方法场景1:扫描单个Python文件场景2:递归扫描整个项目目录五、结果解读六、总结一、工具简介 Bandit 是由Python官方推荐的静态代码分析工具(SAST)…...

实习记录小程序|基于SSM+Vue的实习记录小程序设计与实现(源码+数据库+文档)

实习记录小程序 目录 基于SSM的习记录小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、小程序端&#xff1a; 2、后台 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码…...

老旧设备升级利器:Modbus TCP转 Profinet让能效监控更智能

在工业自动化领域&#xff0c;ModbusTCP和Profinet是两种常见的通讯协议。Profinet是西门子公司推出的基于以太网的实时工业以太网标准&#xff0c;而Modbus则是由施耐德电气提出的全球首个真正开放的、应用于电子控制器上的现场总线协议。这两种协议各有各的优点&#xff0c;但…...

【从基础到模型网络】深度学习-语义分割-ROI

在语义分割中&#xff0c;ROI&#xff08;Region of Interest&#xff0c;感兴趣区域&#xff09;是图像中需要重点关注的部分。其作用包括&#xff1a;提高效率&#xff0c;减少高分辨率图像的计算量&#xff1b;增强分割精度&#xff0c;聚焦关键语义信息&#xff1b;减少背景…...

Qt控件:交互控件

交互控件 1. QAction核心功能API 1.2 实例应用情况应用场景 1.3 QAction与QPushButton/QToolButton关系QActionQPushButtonQToolButton三者关系 1. QAction ##1. 1简介与API QAction 是一个核心类&#xff0c;用于表示应用程序中的一个操作&#xff08;如菜单项、工具栏按钮或…...

前端下载ZIP包方法总结

在前端实现下载 ZIP 包到本地&#xff0c;通常有以下几种方法&#xff0c;具体取决于 ZIP 包的来源&#xff08;静态文件、后端生成、前端动态生成等&#xff09;&#xff1a; 方法 1&#xff1a;直接下载静态文件&#xff08;最简单&#xff09; 如果 ZIP 包是服务器上的静态…...

掌握Docker:从运行到挂载的全面指南

目录 1. Docker的运行2. 查看Docker的启动日志3. 停止容器4. 容器的启动5. 删除容器6. 查看容器的详细信息7.一条命令关闭所有容器拓展容器的复制&#xff08;修改数据不会同步&#xff09;容器的挂载&#xff08;修改数据可以同步&#xff09;挂载到现有容器 1. Docker的运行 …...

Pandas pyecharts数据可视化基础③

pyecharts基础绘图案例解析 引言思维导图代码案例分析 提前安装依赖同样操作安装完重新启动Jupyter Notebook三维散点图&#xff08;代码5 - 40&#xff09; 代码结果代码解析 漏斗图&#xff08;代码5 - 41&#xff09;结果代码解析 词云图&#xff08;代码5 - 42&#xff09;…...

QMK固件OLED显示屏配置教程:从零开始实现个性化键盘显示(实操部分)

QMK固件OLED显示屏配置教程:从零开始实现个性化键盘显示 📢 前言: 作为一名键盘爱好者,近期研究了QMK固件的OLED显示屏配置,发现网上的教程要么太过复杂,要么过于简单无法实际操作。因此决定写下这篇教程,从零基础出发,带大家一步步实现键盘OLED屏幕的配置与个性化显示…...

数据库中关于查询选课问题的解法

前言 今天上午起来复习了老师上课讲的选课问题。我总结了三个解法以及一点注意事项。 选课问题介绍 简单来说就是查询某某同学没有选或者选了什么课。然后查询出该同学的姓名&#xff0c;学号&#xff0c;课程号&#xff0c;课程名之类的。 sql文件我上传了。大家可以尝试练…...

基于Bootstrap 的网页html css 登录页制作成品

目录 前言 一、网页制作概述 二、登录页面 2.1 HTML内容 2.2 CSS样式 三、技术说明书 四、页面效果图 前言 ‌Bootstrap‌是一个用于快速开发Web应用程序和网站的前端框架&#xff0c;由Twitter的设计师Mark Otto和Jacob Thornton合作开发。 它基于HTML、CSS和JavaScri…...

python中http.cookiejar和http.cookie的区别

在Python中&#xff0c;http.cookiejar和http.cookie&#xff08;通常指http.cookies模块&#xff09;是两个不同的模块&#xff0c;它们的主要区别如下&#xff1a; 1. 功能定位 http.cookiejar 用于管理HTTP客户端的Cookie&#xff0c;提供自动化的Cookie存储、发送和接收功…...

【NLP 71、常见大模型的模型结构对比】

三到五年的深耕&#xff0c;足够让你成为一个你想成为的人 —— 25.5.8 模型名称位置编码Transformer结构多头机制Feed Forward层设计归一化层设计线性层偏置项激活函数训练数据规模及来源参数量应用场景侧重GPT-5 (OpenAI)RoPE动态相对编码混合专家架构&#xff08;MoE&#…...

组件导航 (Navigation)+flutter项目搭建-混合开发+分栏

组件导航 (Navigation)flutter项目搭建 接上一章flutter项目的环境变量配置并运行flutter 上一章面熟了搭建flutter并用编辑器运行了ohos项目&#xff0c;这章主要是对项目的工程化改造 先创建flutter项目&#xff0c;再配置Navigation 1.在开发视图的resources/base/profi…...

HGDB企业版迁移到HGDB安全版

文章目录 环境文档用途详细信息 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;4.5.8,6.0 文档用途 HGDB企业版数据库通过命令备份恢复&#xff0c;迁移到HGDB安全版中。 详细信息 1、环境介绍 1 IP 操作系统 cpux.x.65.10 …...

ProfibusDP主站转modbusTCP网关与ABB电机保护器数据交互

ProfibusDP主站转modbusTCP网关与ABB电机保护器数据交互 在工业自动化领域&#xff0c;Profibus DP&#xff08;Process Field Bus&#xff09;和Modbus TCP是两种常见的通讯协议&#xff0c;它们各自在不同的场合发挥着重要作用。然而&#xff0c;随着技术的发展和应用需求的…...

AM32电调学习解读六:main.c文件的函数介绍

最近在学习AM32电调的2.18版本的源码&#xff0c;我用的硬件是AT32F421&#xff0c;整理了部分流程处理&#xff0c;内容的颗粒度是按自己的需要整理的&#xff0c;发出来给有需要的人参考。按自己的理解整理的&#xff0c;技术能力有限&#xff0c;可能理解有误&#xff0c;欢…...

ubuntu24.04上安装NVIDIA driver+CUDA+cuDNN+Anaconda+Pytorch

一、NVIDIA driver 使用Ubuntu系统的&#xff1a;软件和更新——>附加驱动&#xff0c;安装NVIDIA驱动。 二、CUDA 安装命令&#xff1a;sudo apt install nvidia-cuda-toolkit 三、cuDNN cuDNN 9.10.0 Downloads | NVIDIA Developer 四、Anaconda Download Anaconda Di…...

AutoVACUUM (PostgreSQL) 与 DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC (Oracle) 对比

AutoVACUUM (PostgreSQL) 与 DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC (Oracle) 对比 核心功能对比 特性PostgreSQL AutoVACUUMOracle GATHER_DATABASE_STATS_JOB_PROC主要目的空间回收 统计信息更新仅优化器统计信息收集底层机制MVCC(多版本并发控制)维护CBO(基于成本的…...

Rust中的交叉编译与vendered特性

Rust中的交叉编译与vendered特性 引言 Rust 作为一种现代系统编程语言&#xff0c;以其内存安全和并发性能著称。然而&#xff0c;当涉及到跨平台开发时&#xff0c;尤其是交叉编译&#xff0c;开发者往往会遇到各种依赖问题。vendored 特性作为 Cargo 生态系统中的一个重要工…...

3、函数和约束

# 提供的数据sql CREATE TABLE IF NOT EXISTS student(no BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 学号,name VARCHAR(20) NOT NULL COMMENT 姓名,sex VARCHAR(2) DEFAULT 男 COMMENT 性别, age INT(3) DEFAULT 0 COMMENT 年龄,score DOUBLE(5,2) COMMENT 成绩…...

PhpStudy | PhpStudy 工具安装 —— Windows 系统安装 PhpStudy

&#x1f31f;想了解这个工具的其它相关笔记&#xff1f;看看这个&#xff1a;[网安工具] 服务器环境配置工具 —— PhpStudy 使用手册 笔者备注&#xff1a;Windows 中安装 PhpStudy 属于傻瓜式安装&#xff0c;本文只是为了体系完善而发。 在前面的章节中&#xff0c;笔者简…...

Debezium快照事件监听器系统设计

Debezium快照事件监听器系统设计 1. 系统概述 1.1 设计目标 为 Debezium 的快照过程提供可扩展的事件监听机制允许外部系统在快照过程中执行自定义逻辑提供线程安全的事件分发机制确保监听器的异常不会影响主快照流程1.2 核心功能 表快照开始事件监听表快照完成事件监听行数据…...

基于vue框架的订单管理系统r3771(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;商家,用户,商品信息,订单信息,订单配送,评价记录 开题报告内容 基于Vue框架的订单管理系统开题报告 一、研究背景与意义 随着电子商务的快速发展和消费者购物习惯的改变&#xff0c;传统订单管理方式面临效率低、易出错、难以适应高并…...

【2025年前端高频场景题系列】使用同一个链接,如何实现PC打开是web应用、手机打是-个H5 应用?

面试情境与问题引入 在前端开发面试中,面试官经常会抛出一些看似简单却能考察多方面能力的问题。"如何实现同一个链接在PC端和移动端展示不同应用?"就是这样一个典型问题。为什么面试官喜欢问这个问题?因为它能同时考察候选人的设备适配知识、性能优化意识、用户…...

语音识别-2

目录 1.蓝牙优化 1.打开sco 2.外放时的蓝牙的不同版本适配 2.微软文本转语音优化 1.异步文本转语音 2.语音的个性化 上一篇关于语音识别, 虽然能用,但在系统适配,机器适配方面,速度,性能等还是有优化的地方.所以这篇是关于这些的. 1.蓝牙优化 A2DP:是一种单向的高品质音…...

React useState 的同步/异步行为及设计原理解析

一、useState 的同步/异步行为 异步更新&#xff08;默认行为&#xff09; • 场景&#xff1a;在 React 合成事件&#xff08;如 onClick&#xff09;或生命周期钩子&#xff08;如 useEffect&#xff09;中调用 useState 的更新函数时&#xff0c;React 会将这些更新放入队列…...

语音识别——语音转文字

SenseVoiceSmall阿里开源大模型&#xff0c;SenseVoice 是具有音频理解能力的音频基础模型&#xff0c;包括语音识别&#xff08;ASR&#xff09;、语种识别&#xff08;LID&#xff09;、语音情感识别&#xff08;SER&#xff09;和声学事件分类&#xff08;AEC&#xff09;或…...