Dubbo其实也是支持Nacos作为其的注册中心组件,那么接下来我们搞一波整合
环境说明:nacos2.0.0、dubbo、springcloud、jdk1.8
目录结构如图:
结构就不做过多陈述啦,接下来我们就开始整合
1、创建父工程:spring-cloud-nacos
1、pom信息如下:
<modules> <module>spring-cloud-nacos-api</module> <module>spring-cloud-nacos-consumer</module> <module>spring-cloud-nacos-provider</module> </modules> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR3</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.2.5.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.1.1.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2、创建spring-cloud-nacos-api
1、定义一个IHelloService接口类
代码如下:
public interface IHelloService { String sayHello(String name); }
3、创建spring-cloud-nacos-provider,实现api接口
①pom信息如下:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId> <version>2.1.1.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.0.RELEASE</version> <exclusions> <exclusion> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-context</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-context</artifactId> <version>2.2.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.cb</groupId> <artifactId>spring-cloud-nacos-api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> <version>3.0.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
②实现api中的接口。代码如下
@Service //dubbo的注解 public class HelloServiceImpl implements IHelloService { public String sayHello(String name) { return "hello "+name; } }
③配置文件bootstrap.properties信息如下:
//注册服务名 spring.application.name=spring-cloud-nacos-provider //包路径 dubbo.scan.base-packages=com.cb.springcloudnacosprovider dubbo.protocol.name=dubbo dubbo.protocol.port=20880 #表示注册中心挂载到springcloud的注册中心 dubbo.registry.address=spring-cloud://localhost //nacos地址 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 server.port=8080
④启动类直接启动,不需要其他注解修饰,然后观察Nacos控制台的服务列表是否存在上述定义的spring.application.name
到此,生产提供者已经搭建完成
4、创建spring-cloud-nacos-consumer
1、pom信息如下
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId> <version>2.1.1.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.0.RELEASE</version> <exclusions> <exclusion> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-context</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-context</artifactId> <version>2.2.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> <version>3.0.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.cb</groupId> <artifactId>spring-cloud-nacos-api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
2、配置文件bootstrap.properties如下:
//订阅的生产者 dubbo.cloud.subscribed-services=spring-cloud-nacos-provider dubbo.scan.base-packages=com.cb.springcloudnacosconsumer dubbo.protocol.port=20881 dubbo.protocol.name=dubbo spring.application.name=spring-cloud-nacos-consumer spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 server.port=8082
3、编写控制层类,远程调用生产者服务
@RestController public class HelloController { @Reference private IHelloService iHelloService; @RequestMapping("/sayhello") public String say(){ return iHelloService.sayHello(null); } }
4、启动类,修改
@SpringBootApplication(scanBasePackages = "com.cb.springcloudnacosconsumer")
然后启动,查看Nacos控制台有没有消费者的实例,如图:
5、验证远程调用
启动生产提供者、消费者之后,浏览器访问: http://localhost:8082/sayhello
返回:hello null
说明整合完成且成功
附带相关的demo链接:
spring-cloud-nacos: nacos+dubbo+nacos整合https://gitee.com/IT_CB/spring-cloud-nacos