Spring-boot實(shí)現(xiàn)Dubbo自動(dòng)化裝配

分布式理解

遠(yuǎn)程分布式的服務(wù)調(diào)用,其實(shí)可以類比service掉dao層,service掉dao層是基于Spring的依賴注入@Autowired進(jìn)行調(diào)用的,而分布式其實(shí)就可以看成類似的調(diào)用方式,只是被調(diào)用方的注入方式@Reference及相關(guān)參數(shù)url(服務(wù)注冊(cè)地址)進(jìn)入注入,而被調(diào)用的這些服務(wù)被注冊(cè)在Zookeeper注冊(cè)中心或Dubbo的注冊(cè)中心進(jìn)行了統(tǒng)一管理。

Zookeeper和Dubbo自帶的注冊(cè)中心,都屬于服務(wù)端發(fā)現(xiàn),用來(lái)代理所注冊(cè)的這些服務(wù),當(dāng)服務(wù)調(diào)用者需要調(diào)用服務(wù)時(shí),只需要通過服務(wù)的注冊(cè)地址,就能找到對(duì)應(yīng)的服務(wù),并不需要關(guān)注服務(wù)是如何尋找的問題,或者服務(wù)名叫什么的問題,這些都被Zookeeper和Dubbo所代理了。下面是服務(wù)端發(fā)現(xiàn)的原理圖:

image.png

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

服務(wù)提供方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

## 使用通訊協(xié)議、暴露端口
dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 20880

## 注冊(cè)中心
dubbo.registry.id = my-registry
dubbo.registry.address = N/A

服務(wù)消費(fèi)方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

配置說(shuō)明

spring.dubbo.application.name 應(yīng)用名稱
spring.dubbo.registry.address 注冊(cè)中心地址
spring.dubbo.protocol.name 協(xié)議名稱
spring.dubbo.protocol.port 協(xié)議端口

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。