深入Dubbo源码 - SPI的使用与好处

背景

相信阅读过Dubbo源码的同学应该看到在Dubbo中的很多接口上都有一个@SPI的注解,笔者也不例外,但是一直不知道这个注解具体是干什么的,为了解决什么问题,怎么去使用?网上简单检索了下,中文名:服务供给接口,详见下图(来自百度百科)。
在这里插入图片描述
也许因为dubbo本身的功能强大,所以笔者也只是知道能dubbo可以自定义实现某些策略,比如负载均衡、序列化、线程池类型等等,但是还未正式在线上环境中使用。趁着节假日花些时间研究下,记录下,希望对大家有用。

代码样例

以下代码均是经过本地验证的,纯属手敲,具体执行详见Glory’s Github
注:测试项目搭建spring-boot + spring-boot-dubbo

验证思路

正如上图所属,说@SPI是实现某个特定的服务,那就来个简单的实现,最熟悉的莫过于负载均衡(LoadBalance)策略了,本地启动两个provider,端口不同,通过consumer的入参来决定访问指定的provider

启动provider

代码极其简单,代码框架如下
在这里插入图片描述

import org.apache.dubbo.config.annotation.Service;
import org.apache.dubbo.rpc.RpcContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

// 指定版本和分组
@Service(version = "1.0.0",group = "glory")
public class DemoServiceImpl implements DemoService {
    private static final Logger logger = LoggerFactory.getLogger(DemoServiceImpl.class);

    @Override
    public String sayHello(Integer port) {
        logger.info("Hello " + port + " request from consumer: " + RpcContext.getContext().getRemoteAddress());
        return "Hello ,"+port+" response from provider: " + RpcContext.getContext().getLocalAddress();
    }

}

以下为application.yml配置文件

server:
  port: 8083
dubbo:
  application:
    name: dubbo-common-provider
  scan:
    base-packages: com.redsun.rpc.dubbo
  protocol:
    name: dubbo
    port: 12345
  registry:
    address: zookeeper://127.0.0.1:2181

还需要注意的是,在启动时需要指定不同端口,否在无法启动。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值