初探Nacos-- SpringBoot下整合Dubbo和Nacos

关于Nacos已经展开了两篇文章:

初探Nacos(一)-- 单机模式启动

初探Nacos(二)-- SpringCloud使用Nacos的服务注册与发现

使用Dubbo的同学如果要切换Nacos也很容易,官方已有文档:Dubbo 融合 Nacos 成为注册中心,可直接测试其提供的例子:dubbo-registry-nacos,比较简单,就不再多说了,今天我们要尝试的是SpringBoot下整合Dubbo和Nacos。

首先,我们新建一个Module,命名为nacos-demo-api, 定义一个dubbo接口,用于测试参数的传递,以及List和Map的参数请求与返回。

1 public interface HelloProvider {
2 
3     String hello(String name);
4 
5     List<Map<String, String>> testMapList(Map<String, String> map);
6 
7 }

第二步,我们在项目下建一个Dubbo服务提供者Module,命名为nacos-demo-dubbo-provider,在pom.xml添加依赖。

 1 <dependency>
 2     <groupId>xyz.aiding.demo</groupId>
 3     <artifactId>nacos-demo-api</artifactId>
 4     <version>${project.version}</version>
 5 </dependency>
 6 <dependency>
 7     <groupId>org.springframework.boot</groupId>
 8     <artifactId>spring-boot-starter-web</artifactId>
 9 </dependency>
10 <dependency>
11     <groupId>org.springframework.boot</groupId>
12     <artifactId>spring-boot-starter-actuator</artifactId>
13 </dependency>
14 <!-- Dubbo Nacos registry dependency -->
15 <dependency>
16     <groupId>com.alibaba</groupId>
17     <artifactId>dubbo-registry-nacos</artifactId>
18     <version>0.0.1</version>
19 </dependency>
20 <!-- Dubbo dependency -->
21 <dependency>
22     <groupId>com.alibaba</groupId>
23     <artifactId>dubbo</artifactId>
24     <version>2.6.5</version>
25 </dependency>
26 <!-- Alibaba Spring Context extension -->
27 <dependency>
28     <groupId>com.alibaba.spring</groupId>
29     <artifactId>spring-context-support</artifactId>
30     <version>1.0.2</version>
31 </dependency>
32 <dependency>
33     <groupId>com.alibaba.boot</groupId>
34     <artifactId>dubbo-spring-boot-starter</artifactId>
35     <version>0.2.1.RELEASE</version>
36     <exclusions>
37         <exclusion>
38             <groupId>com.alibaba</groupId>
39             <artifactId>dubbo</artifactId>
40         </exclusion>
41     </exclusions>
42 </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注解。

1 @SpringBootApplication
2 public class NacosDubboProviderApplication {
3 
4     public static void main(String[] args) {
5         SpringApplication.run(NacosDubboProviderApplication.class, args);
6     }
7 
8 }

并实现dubbo接口。

 1 @Service
 2 public class HelloProviderImpl implements HelloProvider {
 3 
 4     @Value("${spring.profiles.active}")
 5     private String env;
 6 
 7     @Override
 8     public String hello(String name) {
 9         return "hello, " + name;
10     }
11 
12     @Override
13     public List<Map<String, String>> testMapList(Map<String, String> map) {
14         List<Map<String, String>> list = new ArrayList<Map<String, String>>();
15         list.add(map);
16         Map<String, String> map2 = new HashMap<String, String>();
17         map2.put("env", env);
18         map2.put("testKey", "testValue");
19         list.add(map2);
20         return list;
21     }
22 }

启动该Dubbo提供者服务,登陆Nacos控制台,可以看到服务已注册。

如图所示,服务名前缀为 providers: 的信息为服务提供者的元信息,consumers: 则代表服务消费者的元信息。点击“详情”可查看服务状态详情。

第四步,我们在项目下建一个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。

1 @EnableDubbo
2 @SpringBootApplication
3 public class NacosDubboConsumerApplication {
4 
5     public static void main(String[] args) {
6         SpringApplication.run(NacosDubboConsumerApplication.class, args);
7     }
8 
9 }
再编写一个web controller,调用上面编写的Duboo接口HelloProvider。注意,这里的provider调用,必须要使用注解@Reference,@Reference是Dubbo 远程服务的依赖注入注解,需要服务提供方和消费端约定接口(interface)、版本(version)以及分组(group)信息。
 1 @RestController
 2 public class HelloController {
 3 
 4     @Reference
 5     HelloProvider helloProvider;
 6 
 7     @GetMapping(value = "/api/hello")
 8     @ResponseBody
 9     public String index(@RequestParam("name") String name){
10         return helloProvider.hello(name);
11     }
12 
13     @GetMapping(value = "/api/testMapList")
14     @ResponseBody
15     public List<Map<String, String>> testMapList(){
16         Map<String, String> map = new HashMap<String, String>();
17         map.put("hello", "nacos-dubbo");
18         return helloProvider.testMapList(map);
19     }
20 
21 }

启动该Dubbo消费者服务,登陆Nacos控制台,可以看到服务已注册。

点击“详情”可查看服务详情。

打开浏览器,访问http://127.0.0.1:18083/api/hello?name=abc

访问http://127.0.0.1:18083/api/testMapList

就是这么简单,SpringBoot下整合Dubbo和Nacos到此结束,下一章我们开始尝试Nacos作为配置中心的使用。


转自:https://juejin.cn/post/6844903806833000455
参考:

posted @ 2022-10-21 17:14  Boblim  阅读(1448)  评论(0编辑  收藏  举报