dubbo复习:(15)泛化调用

客户端在没有拿到服务器端接口定义的情况下通过反射获取服务
1.服务器端定义接口

package cn.edu.tju.service;public interface DevelopService {String invoke(String param);
}

2.服务器端实现接口

package cn.edu.tju.service;import org.apache.dubbo.config.annotation.DubboService;@DubboService(group = "group1",version = "1.0")
public class DevelopProviderServiceV1 implements DevelopService{@Overridepublic String invoke(String param) {StringBuilder s = new StringBuilder();s.append("ServiceV1 param:").append(param);return s.toString();}
}

3.客户端在没有拿到服务器端接口定义的情况下,直接通过反射获取服务

package cn.edu.tju.service;import com.alibaba.fastjson.JSON;
import org.apache.dubbo.common.config.ReferenceCache;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.utils.SimpleReferenceCache;
import org.apache.dubbo.rpc.service.GenericService;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;@Component
public class GenericTask implements CommandLineRunner {@Overridepublic void run(String... args) throws Exception {GenericService genericService = buildGenericService("cn.edu.tju.service.DevelopService","group1","1.0");//传入需要调用的方法,参数类型列表,参数列表Object result = genericService.$invoke("invoke", new String[]{"java.lang.String"}, new Object[]{"g1"});System.out.println("GenericTask Response: " + JSON.toJSONString(result));}private GenericService buildGenericService(String interfaceClass, String group, String version) {ReferenceConfig<GenericService> reference = new ReferenceConfig<>();reference.setInterface(interfaceClass);reference.setVersion(version);//开启泛化调用reference.setGeneric("true");reference.setTimeout(30000);reference.setGroup(group);ReferenceCache cache = SimpleReferenceCache.getCache();try {return cache.get(reference);} catch (Exception e) {throw new RuntimeException(e.getMessage());}}
}

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

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

相关文章

521源码-网站源码-Thinkphp聊天室H5实时聊天室群聊聊天室自动分配账户完群组/私聊/禁言等功能/全开源运营版本

全开源运营版本聊天室H5实时聊天室群聊聊天室自动分配账户完群组/私聊/禁言等功能 都是去年买的&#xff0c;很多买的源码基本都下架了&#xff0c;详情还是套已经老站的&#xff0c;可能网上已经流传了点&#xff0c;不过还是不影响这个源码的牛逼所在 运营版本的聊天室&…

Bev算法在J5平台的部署

文章目录 1. 介绍1. 1 Bev的优势1. 2 视角转换13 Bev 感知总体框架2 IPM 方案2.1 性能指标2.2 Backbone2.3 视角转换2.3 坐标系转换2.4 grid sample采样原理2.5 IPM空间融合2.6 IPM-Neck2.7 多任务头2.7.1 分割头2.7.2 检测头

JVM之【运行时数据区2——堆】

三、堆&#xff08;Heap&#xff09; 1、什么是堆 在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;堆&#xff08;Heap&#xff09;是用于动态分配内存的区域。在Java程序运行时&#xff0c;所有对象和数组都是在堆中分配内存的。堆是Java内存模型的重要组成部分&…

21.Redis之分布式锁

1.什么是分布式锁 在⼀个分布式的系统中, 也会涉及到多个节点访问同⼀个公共资源的情况. 此时就需要通过 锁 来做互斥控制, 避免出现类似于 "线程安全" 的问题. ⽽ java 的 synchronized 或者 C 的 std::mutex, 这样的锁都是只能在当前进程中⽣效, 在分布式的这种多…

LabVIEW调用第三方硬件DLL常见问题及开发流程

在LabVIEW中调用第三方硬件DLL时&#xff0c;除了技术问题&#xff0c;还涉及开发流程、资料获取及与厂家的沟通协调。常见问题包括函数接口不兼容、数据类型转换错误、内存管理问题、线程安全性等。解决这些问题需确保函数声明准确、数据类型匹配、正确的内存管理及线程保护。…

堆算法详解

目录 堆 二叉堆的实现 二叉堆的插入 二叉堆取出堆顶 &#xff08;extract/delete max&#xff09; 优先对列 (priority queue) 堆的实现 语言中堆的实现 leadcode 题目堆应用 堆 堆是一种高效维护集合中最大或最小元素的数据结构。 大根堆&#xff1a;根节点最大的堆…

C/C++开发,2024.x CLion安装,亲测有效

CLion 是一款专为 C 和 C 开发者设计的跨平台集成开发环境&#xff08;IDE&#xff09;&#xff0c;提供了智能代码补全、代码分析、调试和 Git 集成等功能&#xff0c;以提高开发效率和代码质量。 1.下载安装c/c开发工具 CLion 先去官网下载&#xff0c;我这里下载的是最新版…

装修全流程

Summary 从2023年底到现在&#xff08;2024年6月2日&#xff09;&#xff0c;装修可以定的东西基本过半了&#xff0c;我按照时间顺序把每个环节的内容和想法都记录一下 环节 选装修公司、找设计师设计环节预算计算角色介绍建材选型敲墙和开工水电放样泥工木工放样To be cont…

Re73 读论文:ULMFiT Universal Language Model Fine-tuning for Text Classification

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名&#xff1a;Universal Language Model Fine-tuning for Text Classification 模型简称&#xff1a;ULMFiT 模型全名&#xff1a;Universal Language Model Fine-tuning ArXiv网址&#xff1a;https…

20240529每日前端--------vue数组对象包含数组,判断子数组是否有重复对象

数组格式如下&#xff1a; "industrySceneList": [{"mainIndustry": 1,"mainIndustryName": "林草","sceneList": [{"subIndustry": 1,"subIndustryName": "森林防火"}]},{"mainIndust…

【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版6(附带项目源码)

最终效果 系列导航 文章目录 最终效果系列导航前言方法一、使用excel配置表excel转txt文本读取txt数据按配置信息生成僵尸 方法二、使用ScriptableObject 配置关卡信息源码结束语 前言 本节主要是推荐两种实现配置关卡信息&#xff0c;并按表生成僵尸和关卡波次 方法一、使用…

PCIe总线-事物层之TLP路由介绍(七)

1.概述 下图是一个PCIe总线系统示意图。此时RC发出一个TLP&#xff0c;经过Switch访问EP&#xff0c;TLP的路径为红色箭头所示。首先TLP从RC的下行OUT端口发出&#xff0c;Switch的上行IN端口接收到该TLP后&#xff0c;根据其路由信息&#xff0c;将其转发到Switch的下行OUT端…

领域驱动设计(DDD)学习笔记之:基础理论与概念

DDD基础概念 领域、子域和限界上下文 在领域驱动设计&#xff08;DDD&#xff09;中&#xff0c;领域、子域和限界上下文是基础的概念&#xff0c;它们帮助我们理解和组织复杂的业务系统。以下是对这些概念的详细讲解&#xff1a; 1. 领域&#xff08;Domain&#xff09; 定…

AI学习指南机器学习篇-线性回归在python中的实现sklearn

AI学习指南机器学习篇-线性回归在python中的实现sklearn 在机器学习领域中&#xff0c;线性回归是最为基础和常见的模型之一。它被广泛应用于预测和建模等领域&#xff0c;是我们学习机器学习的不二选择。 本篇博客将详细介绍如何使用Python中的sklearn库来实现一元和多元线性…

Google力作 | Infini-attention无限长序列处理Transformer

更多文章&#xff0c;请关注微信公众号&#xff1a;NLP分享汇 原文链接&#xff1a;Google力作 | Infini-attention无限长序列处理Transformerhttps://mp.weixin.qq.com/s?__bizMzU1ODk1NDUzMw&mid2247485000&idx1&sne44a7256bcb178df0d2cc9b33c6882a1&chksm…

MySQL 连接池在 Python 中的深度探索与实践

MySQL 连接池在 Python 中的深度探索与实践 在 Python 中&#xff0c;高效地管理数据库连接是一个关键任务&#xff0c;尤其是在处理大量并发请求时。MySQL 连接池作为优化数据库连接管理的工具&#xff0c;显得尤为重要。本文将从四个方面、五个方面、六个方面和七个方面&…

Linux的shell脚本:如何用bash脚本从mysql数据库中直接读取用户数据,并直接显示出来(一条命令查看数据库信息)

目录 一、要求 二、脚本和解释 三、脚本执行 1、 脚本保存为sh文件 2、给脚本赋予执行权限 3、运行脚本 四、Bash脚本中&#xff0c;可以使用哪些MySQL语句 1、连接到MySQL数据库 2、执行SQL语句 3、查询并显示结果 4、脚本中执行SQL文件 5、数据库操作 …

conda源不能用了的问题

conda旧没用了&#xff0c;不知道什么原因&#xff0c;安装源出问题&#xff0c;报如下错&#xff1a; Loading channels: failedUnavailableInvalidChannel: HTTP 404 NOT FOUND for channel anaconda/pkgs/main <https://mirrors.aliyun.com/anaconda/pkgs/main>The c…

Vue.js 动态组件与异步组件

title: Vue.js 动态组件与异步组件 date: 2024/6/2 下午9:08:50 updated: 2024/6/2 下午9:08:50 categories: 前端开发 tags:Vue概览动态组件异步加载性能提升路由管理状态控制工具生态 第1章 Vue.js 简介 1.1 Vue.js 概述 Vue.js 是一个渐进式的JavaScript框架&#xff0c;…

6.2数据库作业

文章目录 11.11.21.3 22.12.2 33.13.23.3 4 1 1.1 丢失更新(lost update)异常是指如果事务Tj读取了一个数据项&#xff0c;然后另一个事务Ti写该数据项(可能基于先前的读取)&#xff0c;然后Tj写该数据项。于是Ti做的更新丢失了&#xff0c;因为Tj的更新覆盖了Ti写入的值。 给…