Spring-boot实现Dubbo自动化装配

分布式理解

远程分布式的服务调用,其实可以类比service掉dao层,service掉dao层是基于Spring的依赖注入@Autowired进行调用的,而分布式其实就可以看成类似的调用方式,只是被调用方的注入方式@Reference及相关参数url(服务注册地址)进入注入,而被调用的这些服务被注册在Zookeeper注册中心或Dubbo的注册中心进行了统一管理。

Zookeeper和Dubbo自带的注册中心,都属于服务端发现,用来代理所注册的这些服务,当服务调用者需要调用服务时,只需要通过服务的注册地址,就能找到对应的服务,并不需要关注服务是如何寻找的问题,或者服务名叫什么的问题,这些都被Zookeeper和Dubbo所代理了。下面是服务端发现的原理图:

Spring-boot实现Dubbo自动化装配_第1张图片
image.png

下面,上干货github源码地址:
https://github.com/SpringEE/SpringBoot-dubbo

服务提供方Provider

@Service(
        version = "${demo.service.version}",
        application = "${dubbo.application.id}",
        protocol = "${dubbo.protocol.id}",
        registry = "${dubbo.registry.id}"
)
public class CityServiceImpl implements CityService {

    @Override
    public City findCityByName(String cityName) {
        System.out.println("request cityName: " + cityName);
        return new City("武汉", "湖北");
    }
}

application.properties

# Spring boot application
spring.application.name = dubbo-provider-demo

## ApplicationConfig Bean
demo.service.version=1.0.0
dubbo.application.id = dubbo-boot-provider
dubbo.application.name = dubbo-boot-provider

## 使用通讯协议、暴露端口
dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 20880

## 注册中心
dubbo.registry.id = my-registry
dubbo.registry.address = N/A

服务消费方Consumer

@RestController
public class HelloController {

    @Reference(version = "${demo.service.version}",
            application = "${dubbo.application.id}",
            url = "${dubbo.service.url}")
    private CityService cityService;


    @RequestMapping("/hello")
    public Object hello() {
        return cityService.findCityByName("武汉");
    }
}

application.properties

spring.application.name=dubbo-boot-consumer

demo.service.version=1.0.0

dubbo.application.id=dubbo-boot-consumer
dubbo.application.name=dubbo-boot-consumer

dubbo.service.url=dubbo://127.0.0.1:20880

配置说明

spring.dubbo.application.name 应用名称
spring.dubbo.registry.address 注册中心地址
spring.dubbo.protocol.name 协议名称
spring.dubbo.protocol.port 协议端口

你可能感兴趣的:(Spring-boot实现Dubbo自动化装配)