微服务调用之dubbo

把一个服务拆分成多个服务的时候(微服务),最大的问题是服务间的调用问题。调用方式总体分为两类:RPC 和 事件驱动。

RPC:常见的(远程通信)rest/RMI/Stocket、(Google)gRPC、(阿里)Dubbo等

事件驱动:常见的ActiveMQ,RabbitMQ,RocketMQ、Kafka等
1.dubbo使用tcp实现服务之间调用(任何两个服务间通信都需要先进行tcp连接,ip地址+端口号),注册中心会自动来实现连接。

dubbo常用注册中心:SimpleRegistry(dubbo自带)、Zookeeper、Multicast、Redis、Simple、Nacos

1.1 本次演示不使用注册中心实现服务间调用

服务提供者provider.xml:
作用:暴露服务接口

//name:通信协议名称,例如:dubbo、RMI、Http等
<dubbo:protoc name="dubbo“ port="20881 host="localhost">
//提供的接口
<dubbo service interface="com.test.DemoService" ref="demoServiceImpl"/>

//接口具体实现类,一般用@Component放入bean容器
<bean id="demoServiceImpl" class="com.test.DemoServiceImpl"/>

消费者customer.xml
作用:调用服务者接口

<dubbo:protoc name="dubbo“ port="20881" host="localhost">

<dubbo:reference  interface="com.test.DemoService" id="demoServiceImpl
 url="dubbo://localhost:20881/com.test.DemoService"">

customer server调用provider server

public class Consumer {
    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("customer.xml");
        context.start();
        // 获取远程服务代理
        DemoService demoService = (DemoService)context.getBean("demoServiceImpl");
        // 执行远程方法
        demoService.xxxxx();
    }
}

这就是一个典型的点对点的服务调用。

2)为了高可用,提供者可以启动多个服务。借用大佬画的图

一个用户服务对应一个:ip
userService1:192.0.0.1
userService2:192.0.0.2
userService3:192.0.0.3

//配置负责均衡策略loadbalance:random,roundrobin,leastactive,
分别表示:随机,轮循,最少活跃调用
<dubbo:reference interface="com.test.DemoService" id="demoServiceImpl”
 url="dubbo://192.0.0.1:20881/com.test.DemoService;
 		dubbo://192.0.0.2:20881/com.test.DemoService;
 		dubbo://192.0.0.3:20881/com.test.DemoService"
 loadbalance=“roundrobin">

在这里插入图片描述
这种方式存在的问题:
1.当服务者增加减少节点,需要更改配置文件。
2.当其中一个服务宕机,消费者感知不到,还会向宕机的服务发送请求,发生错误。
总结:dubbo使用tcp实现服务器之间连接/调用。可以使用注册中心也可以不使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值