初探Nacos(三)-- SpringBoot下整合Dubbo和Nacos

愛訂不訂發表於2019-03-25

花小錢,周邊遊,馬上搶,請關注公眾號:愛訂不訂

作者:唐璜

關於Nacos已經展開了兩篇文章:

初探Nacos(一)-- 單機模式啟動

初探Nacos(二)-- SpringCloud使用Nacos的服務註冊與發現

使用Dubbo的同學如果要切換Nacos也很容易,官方已有文件:Dubbo 融合 Nacos 成為註冊中心,可直接測試其提供的例子:dubbo-registry-nacos,比較簡單,就不再多說了,今天我們要嘗試的是SpringBoot下整合Dubbo和Nacos。

首先,我們新建一個Module,命名為nacos-demo-api, 定義一個dubbo介面,用於測試引數的傳遞,以及List和Map的引數請求與返回。

public interface HelloProvider {

    String hello(String name);

    List<Map<String, String>> testMapList(Map<String, String> map);

}
複製程式碼

第二步,我們在專案下建一個Dubbo服務提供者Module,命名為nacos-demo-dubbo-provider,在pom.xml新增依賴。

<dependency>
    <groupId>xyz.aiding.demo</groupId>
    <artifactId>nacos-demo-api</artifactId>
    <version>${project.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Dubbo Nacos registry dependency -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo-registry-nacos</artifactId>
    <version>0.0.1</version>
</dependency>
<!-- Dubbo dependency -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.6.5</version>
</dependency>
<!-- Alibaba Spring Context extension -->
<dependency>
    <groupId>com.alibaba.spring</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>1.0.2</version>
</dependency>
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.2.1.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
        </exclusion>
    </exclusions>
</dependency>
複製程式碼

並在application.properties配置,將dubbo.registry.address配置到指定的Nacos註冊中心。

server.port=18082
spring.profiles.active=dev
spring.application.name=nacos-demo-dubbo-provider

##dubbo config
dubbo.registry.address=nacos://127.0.0.1:8848
dubbo.application.name=nacos-demo-dubbo-provider
dubbo.scan.basePackages=xyz.aiding.demo.dubbo.provider
dubbo.protocol.name=dubbo
dubbo.protocol.port=-1
複製程式碼

第三步,編寫SpringBoot啟動類,此處不需要像上一章一樣使用@EnableDiscoveryClient註解。

@SpringBootApplication
public class NacosDubboProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosDubboProviderApplication.class, args);
    }

}
複製程式碼

並實現dubbo介面。

@Service
public class HelloProviderImpl implements HelloProvider {

    @Value("${spring.profiles.active}")
    private String env;

    @Override
    public String hello(String name) {
        return "hello, " + name;
    }

    @Override
    public List<Map<String, String>> testMapList(Map<String, String> map) {
        List<Map<String, String>> list = new ArrayList<Map<String, String>>();
        list.add(map);
        Map<String, String> map2 = new HashMap<String, String>();
        map2.put("env", env);
        map2.put("testKey", "testValue");
        list.add(map2);
        return list;
    }
}
複製程式碼

啟動該Dubbo提供者服務,登陸Nacos控制檯,可以看到服務已註冊。

初探Nacos(三)-- SpringBoot下整合Dubbo和Nacos
如圖所示,服務名字首為 providers: 的資訊為服務提供者的元資訊,consumers: 則代表服務消費者的元資訊。點選“詳情”可檢視服務狀態詳情。
初探Nacos(三)-- SpringBoot下整合Dubbo和Nacos

第四步,我們在專案下建一個Dubbo服務消費者Module,命名為nacos-demo-dubbo-consumer,在pom.xml新增跟nacos-demo-dubbo-provider一樣的依賴。再在application.properties配置,將dubbo.registry.address配置到指定的Nacos註冊中心,也跟provider類同。

server.port=18083
spring.profiles.active=dev
spring.application.name=nacos-demo-dubbo-consumer

##dubbo config
dubbo.registry.address=nacos://127.0.0.1:8848
dubbo.application.name=nacos-demo-dubbo-consumer
dubbo.scan.basePackages=xyz.aiding.demo.dubbo.provider
dubbo.protocol.name=dubbo
dubbo.protocol.port=-1
複製程式碼

第五步,編寫SpringBoot啟動類,注意,此處需要加上註解@EnableDubbo。

@EnableDubbo
@SpringBootApplication
public class NacosDubboConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosDubboConsumerApplication.class, args);
    }

}
複製程式碼

再編寫一個web controller,呼叫上面編寫的Duboo介面HelloProvider。注意,這裡的provider呼叫,必須要使用註解@Reference,@Reference是Dubbo 遠端服務的依賴注入註解,需要服務提供方和消費端約定介面(interface)、版本(version)以及分組(group)資訊。

@RestController
public class HelloController {

    @Reference
    HelloProvider helloProvider;

    @GetMapping(value = "/api/hello")
    @ResponseBody
    public String index(@RequestParam("name") String name){
        return helloProvider.hello(name);
    }

    @GetMapping(value = "/api/testMapList")
    @ResponseBody
    public List<Map<String, String>> testMapList(){
        Map<String, String> map = new HashMap<String, String>();
        map.put("hello", "nacos-dubbo");
        return helloProvider.testMapList(map);
    }

}
複製程式碼

啟動該Dubbo消費者服務,登陸Nacos控制檯,可以看到服務已註冊。

初探Nacos(三)-- SpringBoot下整合Dubbo和Nacos
點選“詳情”可檢視服務詳情。
初探Nacos(三)-- SpringBoot下整合Dubbo和Nacos

開啟瀏覽器,訪問http://127.0.0.1:18083/api/hello?name=abc

初探Nacos(三)-- SpringBoot下整合Dubbo和Nacos
訪問http://127.0.0.1:18083/api/testMapList
初探Nacos(三)-- SpringBoot下整合Dubbo和Nacos

就是這麼簡單,SpringBoot下整合Dubbo和Nacos到此結束,下一章我們開始嘗試Nacos作為配置中心的使用。

相關文章