目录 Scalable network services 可扩展的网络服务 Event-driven processing 事件驱动处理 Reactor pattern Reactor 模式 Basic version 基本版本 Multithreaded versions 多线程版本 Other variants 其他变体 Walkthrough of java.nio nonblocking IO APIs 预编排java.nio nonblocking IO APIs Network Services 网络服务 Web services, Distributed Objects, etc 网络服务,分布式对象,等等。 Most have same basic structure: 大多数都有以下的基本结构 Read request 读请求 Decode request 解码请求 Process service 处理服务 Encode reply 编码响应 Send reply 发送响应 But differ in nature and cost of each step 当然在实际应用中每一步的运行效率都是不同的,例如其中可能涉及到xml解析、文件传输、web页面的加载、计算服务等不同功能 XML parsing, File transfer, Web page generation, computational services, … Classic Service Designs 传统的服务设计 Each handler may be started in its own thread 在一般的网络服务当中都会为每一个连接的处理开启一个新的线程,我们可以看下大致的示意图: public class Test { private static Integer PORT = 8080; public static void main(String[] args) { Server server = new Server(); server.
什么是metadata,带例子 metadata is simply data about data,It means it is a description and context of the data. It helps to organize, find and understand data. Here are a few real world examples of metadata.
元数据是数据的数据,这意味着他是数据的描述和上下文。它帮助我们了解和认识数据。下面有一些真是的关于元数据的例子。
Typical metadata Those are some typical metadata elements:
Title and description, Tags and categories, Who created and when, Who last modified and when, Who can access or update. A photo Every time you take a photo with today’s cameras a bunch of metadata is gathered and saved with it
常用的网站记录 在线markdown
docker国内镜像加速
另一个maven仓库
java全栈知识体系
jdk版本-爪哇我话你知
代码随想录-算法
labuladong 的算法小抄
Data Structure Visualizations
股票自动交易助手
excalidraw
v2ex
免费图床
Redis命令集
在线搜索代码网站
Doug Lea’s Home Page
编程之路
ubuntu微信
常用命令记录 通用命令 -- 查询系统超过100M的文件 sudo find / -type f -size +100M -- 查找某某文件 sudo find / -name *.java ubuntu常用命令 -- 安装jdk sudo apt install openjdk-8-jdk -- 卸载jdk sudo apt purge openjdk-8-jdk -- 切换java版本 sudo update-alternatives --config java
什么是spi SPI就是Service Provider Interface,是一种动态的服务发现机制。 可以基于运行时动态的加载接口的实现类。通过(接口编程 + 策略模式 + 配置文件) 实现解耦和扩展。
应用 数据库驱动 基于该接口的实现有MySQL,PostgreSQL,SqlServer等。 SLF4J日志框架 Dubbo的SPI扩展 dubbo apache shenyu spring boot starter jdbc的应用 日志的应用 apache shenyu的spi应用 dubbo的spi应用 实现方式 市面上常见的SPI的实现方式有:
JDK的SPI实现 Dubbo的SPI实现、ShenYu的 SPI Spring的SPI实现 JDK的SPI实现流程为
在类路径的META-INF/services目录创建一个以接口全限定名称命名的文件(本质是一个properties)文件,例如命名为java.sql.Driver 该文件中可以指定具体的实现类,也就是每个实现类的全类型限定名为单独一行 例如 META-INF/services/java.sql.Driver # META-INF/services/java.sql.Driver文件内容 com.mysql.jdbc.Driver org.postgresql.Driver 最后通过java.util.ServiceLoader对该文件进行加载,实例化接口的对应实现类(这里隐含了一个约定,所有实现类必须提供无参构造函数,用来反射调用) 底层的实现涉及到类加载、双亲委派等内容,这里不展开。基于这种设计思路,很多主流框架实现了一套SPI扩展,例如Dubbo的SPI扩展模块,就是读取类路径 下META-INF/services/dubbo目录的文件内容进行类加载。ShenYu-SPI模块也是沿用类似的设计思路。
JDK SPI 的代码示例 接口定义 public interface Search { public List<String> searchDoc(String keyword); } 实现类 public class FileSearch implements Search{ @Override public List<String> searchDoc(String keyword) { System.out.println("文件搜索 "+keyword); return null; } } public class DatabaseSearch implements Search{ @Override public List<String> searchDoc(String keyword) { System.
dubbo是否有对文件上传下载导入导出的支持 项目当前架构: HTTP请求 -> 网关SpringCloudGateway -> 网关路由匹配 -> 网关dubbo泛化调用 -> dubbo服务 但与文件相关的操作,还是需要以Controller的形式暴露服务,因为涉及HttpServletResponse、ModelAndView、MultipartFile这些对象,如: @PostMapping("/upload") public Result uploadFile(@RequestParam("file") MultipartFile file) { ...... } **问题:**请问dubbo可支持文件类型的操作,向外暴露服务,从而去除掉controller ? 对于大文件类型的操作,我们建议在首次接收到 MultipartFile 请求之后将文件存储到 HDFS 或者 OSS 等存储介质上,然后在后端传递的时候直接通过一个标识符传递。对于小文件,将 file 转换成 byte 数组传递就行。 这个想的有点大,dubbo专注于分布式式RPC框架,如果把MVC功能,或者消息堆积之类的功能都实现了,就不太好专注于RPC,想的大一些其实可以考虑一些子项目Dubbo-MVC, Dubbo-MQ ,Dubbo-Framework 😄 dubbo是否有对文件上传下载导入导出的支持