请问RPC框架的配置唯一的,还是不同接口服务有自己的配置?
最近跟着学做一个RPC,它的配置类和初始化是这样的
entity:
@Data
public class RpcConfig {
/**
* 名称
*/
private String name ;
/**
* 版本号
*/
private String version;
/**
* 服务器主机名
*/
private String serverHost;
/**
* 服务器端口号
*/
private Integer serverPort;
/**
* 序列化器
*/
private String serializer;
/**
* 注册中心配置
*/
private RegistryConfig registryConfig = new RegistryConfig();
}
初始化
@Slf4j
public class RpcApplication {
private static volatile RpcConfig rpcConfig;
/**
* 框架初始化,支持传入自定义配置
*
* @param newRpcConfig
*/
public static void init(RpcConfig newRpcConfig) {
rpcConfig = newRpcConfig;
log.info("rpc init, config = {}", newRpcConfig.toString());
// 注册中心初始化
RegistryConfig registryConfig = rpcConfig.getRegistryConfig();
Registry registry = RegistryFactory.getInstance(registryConfig.getRegistry());
registry.init(registryConfig);
log.info("registry init, config = {}", registryConfig);
// 创建并注册 Shutdown Hook,JVM 退出时执行操作
Runtime.getRuntime().addShutdownHook(new Thread(registry::destroy));
}
/**
* 初始化
*/
public static void init() {
RpcConfig newRpcConfig;
try {
//读取配置文件
newRpcConfig = ConfigUtils.loadConfig(RpcConfig.class, RpcConstant.DEFAULT_CONFIG_PREFIX);
} catch (Exception e) {
// 配置加载失败,使用默认值
newRpcConfig = new RpcConfig();
}
init(newRpcConfig);
}
/**
* 获取配置
*
* @return
*/
public static RpcConfig getRpcConfig() {
if (rpcConfig == null) {
synchronized (RpcApplication.class) {
if (rpcConfig == null) {
init();
}
}
}
return rpcConfig;
}
}
这样的话这个RpcConfig就是单例的,那消费者远程调用肯定不止一个接口服务吧,这怎么实现调用不同端口的接口服务呢,我是想用Map存储不同服务的RpcConfig,但总感觉不对劲,还是说每次调用前都先初始化一次(读取配置文件中各自的配置项),但不会有线程安全的问题吗?
在RPC(远程过程调用)框架中,配置是否唯一或每个接口服务是否拥有自己的配置,这取决于RPC框架的设计以及具体的应用场景。
从你提供的代码示例来看,RpcConfig
类被设计为一个全局配置类,用于存储RPC框架的一些基本配置信息,如服务器地址、端口、序列化方式以及注册中心配置等。这种设计通常意味着RPC框架可能采用一个统一的配置来管理多个服务之间的通信,但这并不意味着它不能支持不同接口服务使用不同的配置。
全局配置与局部配置结合:
RpcConfig
)可以包含一些共通的配置信息,如序列化方式、注册中心信息等。使用Map存储不同服务的配置:
RpcConfig
,或者包含RpcConfig
作为它们的成员之一。动态配置加载:
线程安全问题:
在你的场景中,如果不同接口服务需要不同的配置(如不同的端口号),你可以考虑使用Map来存储这些配置,或者在设计服务注册和调用机制时允许动态指定或覆盖配置。同时,需要注意线程安全和配置更新的问题。
本文向大家介绍第一次接触Bootstrap框架,包括了第一次接触Bootstrap框架的使用技巧和注意事项,需要的朋友参考一下 关于Bootstrap,话不多说,直接进入主题: 安装 可以通过bootstrap官方网站下载安装 可以通过Bower安装(关于bower一种包管理器,本文不做详解) bower install bootstrap 可以通过npm安装(关于npm可以阅读) npm ins
面试题 如何自己设计一个类似 Dubbo 的 RPC 框架? 面试官心理分析 说实话,就这问题,其实就跟问你如何自己设计一个 MQ 一样的道理,就考两个: 你有没有对某个 rpc 框架原理有非常深入的理解。 你能不能从整体上来思考一下,如何设计一个 rpc 框架,考考你的系统设计能力。 面试题剖析 其实问到你这问题,你起码不能认怂,因为是知识的扫盲,那我不可能给你深入讲解什么 kafka 源码剖析
随着分布式技术和微服务思想流行,技术公司逐步将服务拆分为独立运行的小模块,提高系统整体的健壮性,加快特性的演进速度。微服务通过定义完善的接口进行交互,解耦系统、敏捷迭代、方便服务治理。RPC是目前微服务最广泛的通信方式。然而,众多团队各自研发具备服务治理功能的RPC通信框架,一方面增加开发成本,消耗人力重复造轮子;另一方面不同序列化协议的RPC服务,无法互相通信,影响可用性。因此,通用的RPC通信
对服务开发者, MTransport 屏蔽了底层网络通信细节,从而更专注于业务自身逻辑实现。支持不同语言版本的代码实现, 保持通信协议的一致性,支持服务注册、服务发现、异步通信、负载均衡等丰富的服务治理功能。
Flex提供RPC服务以向客户端提供服务器端数据。 Flex为服务器端数据提供了相当大的控制。 使用Flex RPC服务,我们可以定义要在服务器端执行的用户操作。 Flex RPC Sservices可以与任何服务器端技术集成。 其中一个Flex RPC服务提供内置支持,可以通过线路传输压缩二进制数据,速度非常快。 Flex提供以下三种类型的RPC服务 S.No RPC服务和描述 1 HttpSe
问题内容: 是否有直接从Java代码直接调用GWT RPC服务端点的简便方法?我的意思是真正的Java代码,而不是编译成JavaScript的Java代码。 我问是因为我们想针对GWT RPC接口运行性能基准测试/压力测试。我想用Java编写测试工具,并在JVM中运行它(与在浏览器中运行的javascript相反)。 我认为必须有一种方法可以执行此操作,因为我认为GWT托管模式需要这种功能。但是,