Dubbo原理及实战

dubbo是什么

Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集成。Dubbo框架,是基于容器运行的,容器是Spring。

Dubbo系统分为五个部分:远程服务运行容器(Container),远程服务提供方(Provider)、注册中心(Register)、远程服务调用者(Consumer)、监控中心(Monitor)。
在这里插入图片描述
这很像生产者-消费者模型。只是在这种模型上,加上了注册中心和监控中心,用于管理提供方提供的url,以及管理整个过程。

dubbo能做什么

  1. 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
  2. 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
  3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

dubbo实战

本文基于springboot项目,注册中心使用zookeeper,
关于zookeeper的搭建可以看zookeeper集群搭建篇

  1. 首先假设有两个项目
    服务提供方 spring-boot-dubbo-provider
    服务调用方 spring-boot-dubbo-consumer
    给两个项目分别添加pom依赖:
		<dependency>
			<groupId>com.alibaba.spring.boot</groupId>
			<artifactId>dubbo-spring-boot-starter</artifactId>
			<version>2.0.0</version>
		</dependency>
		<!--zookeeper依赖 -->
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
			<version>3.4.8</version>
		</dependency>
		<dependency>
			<groupId>com.101tec</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.10</version>
		</dependency>
  1. yml配置文件分别

单机:


spring:
  dubbo:
    application:
      name: spring-boot-dubbo-consumer
      registry: zookeeper://116.62.154.78:2181

spring:
  dubbo:
    application:
      name: spring-boot-dubbo-provider
      registry: zookeeper://116.62.154.78:2181

集群

dubbo:
  application:
    name: spring-boot-dubbo-consumer
  registry:
    address: 116.62.154.78:2181,118.31.227.22:2181,49.233.89.186:2181
    check: false
dubbo:
  application:
    name: spring-boot-dubbo-provider
  registry:
    address: 116.62.154.78:2181,118.31.227.22:2181,49.233.89.186:2181
    check: false
  1. 启动类上添加注解@EnableDubboConfiguration
  2. 使用
    服务提供者provider
    service注解使用的是dubbo提供的
import com.alibaba.dubbo.config.annotation.Service;
@Service(interfaceClass = RecordsManageService.class)
public class RecordsManageServiceImpl implements RecordsManageService {

   
    //识别记录查询
    
	@Override
    public FaceResult findRecords(FindRecordsDto findRecordsDto){
        String submitUrl = FaceConstant.HEADURL+findRecordsDto.getEquipmentIp()+":"+findRecordsDto.getEquipmentPort()+"/"+ FaceConstant.API_NEW_FIND_RECORDS;
        String res = HttpUtil.getForString(submitUrl, BeanUtil.beanToMap(findRecordsDto));
        FaceResult result = FaceResultUtil.isSuccess(new JSONObject(res));
        return result;
    }
}    

RecordsManageService最好提取到common,省的每个项目都建一遍
服务消费者consumer
使用@Reference注解调用提供者接口

import com.alibaba.dubbo.config.annotation.Reference;

@RestController
@Slf4j
public class ConsumerTestController {
    @Reference
    private RecordsManageService service;

    @PostMapping("/test")
    public FaceResult findRecords(@RequestBody FindRecordsDto findRecordsDto) { 
        return service.findRecords(findRecordsDto);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值