【SOFARPC】SOFA入门实战

背景

由于最近交付项目,甲方使用了SOFA这套体系,之前虽然有过一些了解,但是真正实战还是没有那么熟悉,因此搭建一个实战的demo,熟悉一下相关内容。

SOFA SIMALE DEMO

项目搭建

项目目录结构
在这里插入图片描述
如上图所示,sofa-common可以定义api接口,sofa-provider作为服务提供者,sofa-consumer为服务消费者。
代码传送门:https://gitee.com/kevin1992/sofa-demo.git

公共API

public interface HelloService {
    String test(String name);
}
@Path("/rest-api")
public interface HttpService {
    @Path("/test")
    @GET
    String test();
}

需要注意接口定义,如果是bolt,dubbo协议,接口跟普通接口无异,不需要任何处理。
如果是rest协议,就需要结合JAXRS注解定义接口,JAXRS注解需要单独引jar包。

服务提供者

@SofaServiceBean(interfaceType = HelloService.class, bindings = @SofaServiceBinding(bindingType = "bolt"))
public class HelloServiceImpl implements HelloService {
    @Override
    public String test(String name) {
        return "hello, " + name;
    }
}

@SofaService(interfaceType = HttpService.class, bindings = {@SofaServiceBinding(bindingType = "rest")})
@Service
public class HttpServiceImpl implements HttpService {
    @Override
    public String test() {
        return "success";
    }
}

服务调用者

写一个controller,调用相关服务,使用@SofaReference注解引入即可。

@RequestMapping("/test")
@RestController
public class ConsumerController {
    @SofaReference(interfaceType = HelloService.class, binding = @SofaReferenceBinding(bindingType = "bolt"))
    private HelloService helloService;

    @SofaReference(interfaceType = HttpService.class, binding = @SofaReferenceBinding(bindingType = "rest"))
    private HttpService httpService;

    @GetMapping("/bolt")
    public String test() {
        return helloService.test("java");
    }

    @GetMapping("/rest")
    public String testRest() {
        return httpService.test();
    }

}

注意事项

注册中心

本案例使用的zk,所以服务提供者和消费者application.properties都需要增加注册中心的配置

com.alipay.sofa.rpc.registry.address=zookeeper://127.0.0.1:2181

当然,它还支持其他的几种常见注册中心,这里不一一赘述。可以查看官方文档:https://www.sofastack.tech/projects/sofa-rpc/registry-sofa/

关于注解

第一种方法
服务调用者使用@SofaService和Spring的@Service同时使用,否则不会自动注入Spring Bean。
第二种方法
直接使用Sofa提供的复合注解@SofaServiceBean,因为这个注解源码可以看到使用到了@Component

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@SofaService
@Component
public @interface SofaServiceBean {
    @AliasFor(
        annotation = Component.class
    )
    String value() default "";

    @AliasFor(
        annotation = SofaService.class
    )
    Class<?> interfaceType() default void.class;

    @AliasFor(
        annotation = SofaService.class
    )
    String uniqueId() default "";

    @AliasFor(
        annotation = SofaService.class
    )
    SofaServiceBinding[] bindings() default {@SofaServiceBinding};
}

其他xml和api也都是支持的,具体参考官方文档。

rest协议

默认的服务发布端口是8341,服务启动成功就可以浏览器访问
http://localhost:8341/rest-api/test

项目启动问题

由于使用了java17的版本会报错,如下:
在这里插入图片描述

Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @69453e37

原因是高版本jdk对jdk8反射使用的限制导致的,只需要在idea启动服务的时候加入一下jvm参数即可:

--add-opens java.base/java.lang=ALL-UNNAMED

idea如图:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于电鳗觅食优化算法(Electric eel foraging optimization,EEFO)的无人机三维路径规划(提供MATLAB代码)

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化飞行…

数据结构小记【Python/C++版】——BST树篇

一&#xff0c;基础概念 BST树&#xff0c;英文全称:Binary Search Tree&#xff0c;被称为二叉查找树或二叉搜索树。 如果一个二叉查找树非空&#xff0c;那么它具有如下性质&#xff1a; 1.左子树上所有节点的值小于根节点的值&#xff0c;节点上的值沿着边的方向递减。 2…

Python+Django+Html网页前后端指纹信息识别

程序示例精选 PythonDjangoHtml网页前后端指纹信息识别 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《PythonDjangoHtml网页前后端指纹信息识别》编写代码&#xff0c;代码整洁&#xff0…

【Spring Boot系列】快速上手 Spring Boot

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【大厂AI课学习笔记NO.75】人工智能产业的就业岗位分布

见上图&#xff0c;这是详细的人工智能产业的就业岗位分布情况。 就业领域包括物联网、智能芯片、机器学习、深度学习、计算机视觉CV、自然语言处理NLP、智慧语音、机器人、知识图谱等领域。 人工智能作为当今科技革命与产业变革的重要驱动力量&#xff0c;其就业岗位分布广泛…

【开源】SpringBoot框架开发软件学院思政案例库系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统管理员2.2 普通教师 三、系统展示四、核心代码4.1 查询思政案例4.2 审核思政案例4.3 查询思政课程4.4 思政案例点赞4.5 新增思政案例评语 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的软件学…

【新书推荐】19.1 DOS程序段前缀PSP

本节内容&#xff1a;介绍DOS程序段前缀及其应用。 ■程序段前缀PSP&#xff1a;DOS系统加载程序时&#xff0c;在程序段前设置一个具有256字节的信息区称为程序段前缀PSP。 ■终止程序的另一途径&#xff1a;利用程序段前缀PSP偏移地址0处的“INT 20H”终止程序。示例代码t19-…

每日五道java面试题之springMVC篇(二)

目录&#xff1a; 第一题. 请描述Spring MVC的工作流程&#xff1f;描述一下 DispatcherServlet 的工作流程&#xff1f;第二题. MVC是什么&#xff1f;MVC设计模式的好处有哪些?第三题. 注解原理是什么?第四题. Spring MVC常用的注解有哪些&#xff1f;第五题. SpingMvc中的…

Java EE之wait和notify

一.多线程的执行顺序 由于多个线程执行是抢占式执行&#xff0c;就会导致顺序不同&#xff0c;同时就会导致出现问题&#xff0c;就比如俩个线程同时对同一个变量进行修改&#xff0c;我们难以预知执行顺序。 但在实际开发中&#xff0c;我们希望代码按一定的逻辑顺序执行&am…

HTML5 Web Worker之性能优化

描述 由于 JavaScript 是单线程的&#xff0c;当执行比较耗时的任务时&#xff0c;就会阻塞主线程并导致页面无法响应&#xff0c;这就是 Web Workers 发挥作用的地方。它允许在一个单独的线程&#xff08;称为工作线程&#xff09;中执行耗时的任务。这使得 JavaScript 代码可…

Node.js:构建高性能网络应用的利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

吴恩达机器学习-可选实验室:逻辑回归,决策边界(Logistic Regression,Decision Boundary))

文章目录 目标数据集图数据逻辑回归模型复习逻辑回归和决策边界绘图决策边界恭喜 目标 在本实验中&#xff0c;你将:绘制逻辑回归模型的决策边界。这会让你更好地理解模型的预测。 import numpy as np %matplotlib widget import matplotlib.pyplot as plt from lab_utils_co…

基于WEB的服务器运行状态的监控分析系统

摘要: 随着云计算和电子商务规模的扩大和复杂性的增加&#xff0c;企业数据中心Web服务器数量急剧增加&#xff0c;用户对网络性能的要求也越来越高&#xff0c;导致企业和用户对数据中心的通信服务稳定性和快速响应要求越来越高。本作品提供一套行之有效的Web服务器性能监控系…

RabbitMQ - 05 - Direct交换机

部署demo项目 通过消息队列demo项目进行练习 相关配置看此贴 http://t.csdnimg.cn/hPk2T 注意 生产者消费者的yml文件也要配置好 什么是Direct交换机 Direct 交换机是 AMQP&#xff08;高级消息队列协议&#xff09;中的一种交换机类型&#xff0c;它根据消息的路由键&am…

【R语言】R包-探索ggtree进化树美化

文章目录 R包-探索ggtree进化树美化分析流程1. 关于包的下载2. 绘制一个基本的进化树图3. 添加样本名称3. 添加节点节点高亮4. 添加分组小结 R包-探索ggtree进化树美化 提示&#xff1a;基于nwk文件进行进化树美化&#xff0c;如更换进化树格式&#xff0c;添加分组、节点、遗传…

【大厂AI课学习笔记NO.78】智能芯片产业人才能力图谱

有志于从事智能芯片产业的朋友&#xff0c;可以参考下上面的图谱。 比如C站的程序猿很多&#xff0c;那么技能能力中&#xff0c;你要掌握的就包括C/C、Python、Bash等常用的编程语言。 还要熟悉TensorFlow、PyTorch等主流的深度学习框架。 这两个框架&#xff0c;我们都介绍…

SpringSecurity两种验证方式及调用流程

一、HttpBasic方式 <security:http-basic/> 二、Formlogin方式 <security:form-login login-page"/userLogin" /> 三、SpringSecurity执行流程

论文阅读《FENET: FOCUSING ENHANCED NETWORK FOR LANE DETECTION》

ABSTRACT 受人类驾驶专注力的启发&#xff0c;这项研究开创性地利用聚焦采样&#xff08;Focusing Sampling&#xff09;、部分视野评估&#xff08;Partial Field of View Evaluation&#xff09;、增强型 FPN 架构和定向 IoU 损失&#xff08;Directional IoU Loss&#xff…

uniapp:小程序数字键盘功能样式实现

代码如下&#xff1a; <template><view><view><view class"money-input"><view class"input-container" click"toggleBox"><view class"input-wrapper"><view class"input-iconone"…

01hadoop概念

大数据与Hadoop 大数据指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 Hadoop是什么&#xff1f; Hadoop是一种分析和处理海量数据的…