SOFARPC的搭建(蚂蚁金服)

SOFARPC是蚂蚁金服的高可扩展、高性能的RPC框架,类似于升级版的dubbo。本文介绍了如何搭建SOFARPC服务端和客户端,包括接口定义、服务暴露和引用,并展示了简单的测试过程。在实际操作中,需要注意版本兼容性问题,解决依赖冲突以确保服务正常发布和调用。
摘要由CSDN通过智能技术生成

SOFARPC是SOFA中间件为我们提供的用于远程服务调用的RPC框架。

简单介绍

SOFARPC 是一个高可扩展性、高性能、生产级的 Java RPC 框架。在蚂蚁金服 SOFARPC 已经经历了十多年及五代版本的发展。SOFARPC 致力于简化应用之间的 RPC 调用,为应用提供方便透明、稳定高效的点对点远程服务调用方案。为了用户和开发者方便的进行功能扩展,SOFARPC 提供了丰富的模型抽象和可扩展接口,包括过滤器、路由、负载均衡等等。同时围绕 SOFARPC 框架及其周边组件提供丰富的微服务治理方案。
SOFARPC同我们之前用的dubbo类似,我们知道dubbo是阿里早期开源版本,SOFARPC暂且可以看成是dubbo的升级版本,在很多方面和dubbo还是差别不大的。

SOFARPC搭建

首先需要创建两个SOFABoot项目(创建方法在之前的文章中),一个作为服务端发布函数,另一个作为客户端接收数据。
在两个SOFABoot项目中分别引入SOFARPC和SOFARegistry所需要的依赖。

        <dependency>
			<groupId>com.alipay.sofa</groupId>
			<artifactId>registry-client-all</artifactId>
			<version>5.4.2</version>
		</dependency>
		<dependency>
			<groupId>com.alipay.sofa</groupId>
			<artifactId>sofa-rpc-all</artifactId>
			<version>5.5.3</version>
		</dependency>

服务端
创建测试接口和对应的接口实现类,用于将实现类中的方法发送到客户端,在客户端调用服务端的方法。
HelloService(测试接口)

public interface HelloService {
    public String sayHello(String name);
}

HelloServiceImpl(接口实现类)

public class HelloServiceImpl implements HelloService {
    public String sayHello(String name) {
        return "hello " + name;
    }
}

Server(服务端代码)

public class Server {
    public static void main(String[] args) {
        // 1. 注册中心配置
        RegistryConfig registryConfig = new RegistryConfig()
                .setProtocol("sofa") // 设置协议
                .setAddress("127.0.0.1:9603"); // 设置注册中心 session 地址

        // 2. 通信服务配置
        ServerConfig serverConfig = new ServerConfig()
                .setProtocol("bolt") // 设置一个协议,默认bolt
                .setPort(12200) // 设置一个端口,默认12200
                .setDaemon(false); // 非守护线程

        // 3. provider 综合配置
        ProviderConfig<HelloService> providerConfig = new ProviderConfig<HelloService>()
                .setInterfaceId(HelloService.class.getName()) // 指定接口
                .setRef(new HelloServiceImpl()) // 指定实现
                .setRegistry(registryConfig) // 指定注册中心
                .setServer(serverConfig); // 指定服务端

        // 4. 进行服务暴露
        providerConfig.export(); // 发布服务
    }
}

客户端
创建测试接口,在客户端调用服务端的方法。
HelloService(测试接口)

public interface HelloService {
    public String sayHello(String name);
}

Client(客户端代码)

public class Client {
    public static void main(String[] args) {
        // 1. 注册中心配置
        RegistryConfig registryConfig = new RegistryConfig()
                .setProtocol("sofa") // 设置协议
                .setAddress("127.0.0.1:9603"); // 设置注册中心 session 地址

        // 2. consumer 综合配置
        ConsumerConfig<HelloService> consumerConfig = new ConsumerConfig<HelloService>()
                .setInterfaceId(HelloService.class.getName()) // 指定接口
                .setRegistry(registryConfig)
                .setProtocol("bolt") // 指定协议
                .setConnectTimeout(10 * 1000);

        // 3. 构造服务引用
        HelloService helloService = consumerConfig.refer();

        Class test = helloService.getClass();
        // 4. 进行服务调用
        while (true){
            System.out.println(helloService.sayHello("555"));
            try{
                Thread.sleep(2000);
            }catch (InterruptedException e){
            }
        }
    }
}

这样,服务端和客户端就都搭建完成了。

SOFARPC测试

首先,打开SOFARegistry注册中心。

运行服务端Server类中的main()函数,可在控制台看到如下输出:

运行客户端Client类中的main()函数,可在控制台看到如下输出:

通过控制台可以看到,客户端已经成功的获取到了服务端发布的方法,如此通过SOFARPC远程调用就成功了。

常见问题

在测试的过程中,首先是版本问题,因为之前项目中的SOFABoot用的版本比官网测试的新,同时项目中引入的很多其他的包,造成了SOFARPC的包与SOFABoot项目中的其他包造成冲突,结果就是服务端无法发布服务,方法暴露不出去,自然无法引用。升级了SOFARPC的版本,又与SOFABoot的版本相冲突,结果是客户端一直接收不到服务端发布的方法,报地址错误(其实地址没问题)。
解决方案
这里我所创建的SOFABoot项目的版本为3.1.0。引入SOFARPC依赖的版本为5.5.3。引入SOFARegistry依赖的版本为5.4.2。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值