0%

sofa-rpc

sofa rpc

为什么需要需要rpc而不是简单的http

  • 但是如果是一个大型的网站,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了,首先就是长链接,不必每次通信都要像http 一样去3次握手什么的,减少了网络开销;
  • 其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。
  • 第三个来说就是安全性。最后就是最近流行的服务化架构、服务化治理,RPC框架是一个强力的支撑

参考文献

注册中心的配置

SOFABoot RPC 也提供一个缓存文件(目前暂不支持),当 Zookeeper 不可用时,使用该缓存文件进行服务发现。配置该缓存文件的方式如下:

1
com.alipay.sofa.rpc.registry.address=zookeeper://xxx:2181?file=/home/admin/registry

参考文献

RPC-02306

编译过程

facade包、怎么编译进去的

对方引facade能成功调用的原因

MISC

META-INF/services/sofa-rpc/com.alipay.sofa.rpc.filter.Filter这个文件有什么用

META-INF/services/sofa-rpc/com.alipay.sofa.rpc.filter.Filter 是一个与 Apache SOFA (Scalable Open Financial Architecture) RPC 框架相关的配置文件。具体来说,这个配置文件遵循 Java 的服务发现机制(Service Provider Interface,SPI),用于声明实现 com.alipay.sofa.rpc.filter.Filter 接口的类。

文件作用

声明服务提供者: 这个文件包含了一个或多个实现 com.alipay.sofa.rpc.filter.Filter 接口的类的完全限定名。如:

com.example.MyCustomFilter

自动加载: 当框架或应用启动时,基于 SPI 机制,SOFA RPC 框架会自动加载并注册这些实现类,不需要手动在代码中指定。

扩展功能: 过滤器(Filter)通常用于对RPC调用进行拦截和处理,比如进行日志记录、性能监控、权限验证等。通过这个文件,你可以轻松地添加自定义的过滤器,增强框架的功能。

文件内容示例

假设你有一个自定义的过滤器类 com.example.MyCustomFilter,你可以在 META-INF/services/sofa-rpc/com.alipay.sofa.rpc.filter.Filter 文件中写入:

com.example.MyCustomFilter

每行一个类名。如果你有多个过滤器,可以在文件中写多行:

代码详情
1
2
3
com.example.MyCustomFilter1
com.example.MyCustomFilter2
com.example.MyCustomFilter3

实现自定义过滤器

创建过滤器类: 你的类需要实现 com.alipay.sofa.rpc.filter.Filter 接口,并实现相应的方法。

代码详情
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.example;

import com.alipay.sofa.rpc.filter.Filter;
import com.alipay.sofa.rpc.core.request.SofaRequest;
import com.alipay.sofa.rpc.core.response.SofaResponse;

public class MyCustomFilter implements Filter {
@Override
public SofaResponse invoke(FilterInvoker invoker, SofaRequest request) throws Throwable {
// 在这里添加你自己的逻辑
BeforeInvoke(request);
SofaResponse response = invoker.invoke(request);
AfterInvoke(response);
return response;
}

private void BeforeInvoke(SofaRequest request) {
// 添加预处理逻辑
}

private void AfterInvoke(SofaResponse response) {
// 添加后处理逻辑
}
}

配置文件: 在资源目录下的 META-INF/services/sofa-rpc/ 目录中创建文件 com.alipay.sofa.rpc.filter.Filter,并写入你的类名。

总结

通过 META-INF/services/sofa-rpc/com.alipay.sofa.rpc.filter.Filter 文件,您可以利用 Java 的SPI机制轻松地扩展和定制SOFA RPC 框架的功能,无需修改框架本身的代码。

Log4j的配置加载顺序?

框架里的代码读的配置文件的配置

MDC

MDC(Mapped Diagnostic Context) 是一个在日志记录系统中使用的重要概念,用于在每个线程中存储特定于线程的上下文信息。每个线程都有独立的MDC数据,不会与其他线程混淆。这在处理多线程应用程序时尤为有用,因为你可以根据某一上下文信息(如请求 ID、用户 session 等)来追踪日志消息。

疑问

为什么这个没有实现类?

org.apache.logging.log4j.core.async.AsyncLogger.TranslatorType#log(java.lang.String, java.lang.StackTraceElement, org.apache.logging.log4j.Level, org.apache.logging.log4j.Marker, org.apache.logging.log4j.message.Message, java.lang.Throwable)