【Dubbo】Dubbo使用小记

9 篇文章 0 订阅
8 篇文章 2 订阅

上文我们搭建好了服务器上的zookeeper服务,暴露在<公网ip>:2182下。接下来就可以使用zookeeper作为注册中心进行rpc调用了。

这里主要记录一下使用注解的方式配置。还有xml和Api的方式,这篇文章https://segmentfault.com/a/1190000019896723讲的很详细,可以作为参考。

和SofaRpc一样,服务提供者和服务消费者都需要保证接口的包名完全一致,如果接口返回对象,也需要实现java.io.Serializable,而且尽可能保证包名类名一致。(不一致会在日志输出ClassNotFoundException,虽然数据注入成功,但我们要尽可能遵守设计原理)

服务提供者

首先是spring风格的config配置,不多说直接看代码,很容易理解。


@Configuration
/* 下面指定了Dubbo应该去哪里找到接口实现,同时也是被Dubbo定义的Server注解修饰的Component */
@EnableDubbo(scanBasePackages = "com.vaskka.jishi.v3.service.impl") 
public class DubboConfig {

    /**
     * zookeeper endpoint
     */
    @Value("${zk-center.endpoint}")
    private String ZK_CENTER;

    /**
     * zookeeper port
     */
    @Value("${zk-center.port}")
    private int ZK_PORT;

    /**
     * dubbo title 服务提供者的名字,我们用作区分
     */
    @Value("${dubbo-center.user-title}")
    private String DUBBO_USER_TITLE;

    @Bean // #1 服务提供者信息配置
    public ProviderConfig providerConfig() {
        ProviderConfig providerConfig = new ProviderConfig();
        providerConfig.setTimeout(5000);
        return providerConfig;
    }

    @Bean // #2 分布式应用信息配置
    public ApplicationConfig applicationConfig() {
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName(DUBBO_USER_TITLE);
        return applicationConfig;
    }

    @Bean // #3 注册中心信息配置
    public RegistryConfig registryConfig() {
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setProtocol("zookeeper");
        registryConfig.setAddress(ZK_CENTER);
        registryConfig.setPort(ZK_PORT);
        return registryConfig;
    }

    @Bean // #4 使用协议配置,这里使用 dubbo
    public ProtocolConfig protocolConfig() {
        ProtocolConfig protocolConfig = new ProtocolConfig();
        protocolConfig.setName("dubbo");
        protocolConfig.setPort(20880);
        return protocolConfig;
    }

}

运行服务,在日志里找到了org.apache.curator.framework.state.ConnectionStateManager 228 postState - State change: CONNECTED说明ZooKeeper·服务成功连接。

服务消费者

最前面提到,我们需要保证接口的一致,包括包名都要一致,这里很重要,不然会报NotFound。

服务消费者的config与提供者差不多,直接看config:


@Configuration
/* 下面这个注解的作用和服务发布者一致,不再赘述 */
@EnableDubbo(scanBasePackages = "com.vaskka.jishi.v3.fruit.service.impl")
/* 下面这行指出我们的服务接口要在那个Component被注入(使用),也就是在哪里被Reference注解修饰 */
@ComponentScan(value = "com.vaskka.jishi.v3.dubbo")
public class DubboConfig {

    /**
     * zookeeper endpoint
     */
    @Value("${zk-center.endpoint}")
    private String ZK_CENTER;

    /**
     * zookeeper port
     */
    @Value("${zk-center.port}")
    private int ZK_PORT;

    /**
     * dubbo sales title
     */
    @Value("${dubbo-center.sales-title}")
    private String DUBBO_SALES_TITLE;


    @Bean // #1 服务提供者信息配置
    public ProviderConfig providerConfig() {
        ProviderConfig providerConfig = new ProviderConfig();
        providerConfig.setTimeout(5000);
        return providerConfig;
    }

    @Bean // #2 分布式应用信息配置
    public ApplicationConfig applicationConfig() {
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName(DUBBO_SALES_TITLE);
        Map<String, String> stringStringMap = new HashMap<String, String>();
        stringStringMap.put("qos.enable","true");
        stringStringMap.put("qos.accept.foreign.ip","true"); // false -> true
        stringStringMap.put("qos.port","33333");
        applicationConfig.setParameters(stringStringMap);
        return applicationConfig;
    }

    @Bean // #3 注册中心信息配置
    public RegistryConfig registryConfig() {
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setProtocol("zookeeper");
        registryConfig.setAddress(ZK_CENTER);
        registryConfig.setPort(ZK_PORT);
        return registryConfig;
    }

    @Bean // #4 使用协议配置,这里使用 dubbo
    public ProtocolConfig protocolConfig() {
        ProtocolConfig protocolConfig = new ProtocolConfig();
        protocolConfig.setName("dubbo");
        protocolConfig.setPort(20880);
        return protocolConfig;
    }

}

在代码中也提到,要使用rpc,我们要用@Reference修饰接口。总体与SofaRpc的使用有很大的相似之处,具体在性能、设计、实现上的不同还没有深究,留作之后的任务对SofaRpc和开源的中间件进行深度的对比。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值