项目实战Dubbo Spring Cloud 并使用Nacos实现注册中心

1,709 阅读1分钟

搞了大半天,终于趟平了。

本文中主要是基于Dubbo实现了服务提供和调用的demo,并接入Nacos注册中心。

Dubbo Spring Cloud 是Spring Cloud Alibaba 的核心组件,它构建在原生的Spring Cloud 标准之上,不仅覆盖了Spring Cloud原生特性,还提供了更加稳定和成熟的实现。接下来,就让我们一步一步揭开它的神秘面纱。

话不多说直接上代码。

版本选择

Spring Cloud Version : Hoxton.SR9

Spring Cloud Alibaba Version : 2.2.6.RELEASE

Spring Boot Version : 2.3.2.RELEASE

(重要)版本一定要匹配,不然一堆报错搞的烦死了

实现Dubbo服务提供方

1、创建一个父工程 dubbo-demo

图片

pom.xml中增加 pom

删除src文件夹

2、创建provider-api模块

这是一个普通的maven工程,在其中创建接口,并执行mvn install 将jar包安装到本地仓库

/** * 服务提供者接口 */public interface HelloService {    /**     * 定义接口,传入名字,打招呼     * @param name     * @return     */    String hello(String name);}

3、创建provider模块

第一步,这是一个spring boot工程,添加依赖​​​​​​​

<dependencies>        <dependency>            <groupId>cn.guoxiaolong</groupId>            <artifactId>provider-api</artifactId>            <version>1.0-SNAPSHOT</version>        </dependency>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter</artifactId>            <version>${spring.cloud.alibaba.version}</version>        </dependency>        <dependency>            <groupId>com.alibaba.cloud</groupId>            <artifactId>spring-cloud-starter-dubbo</artifactId>            <version>${spring.cloud.alibaba.version}</version>        </dependency>        <dependency>            <groupId>com.alibaba.cloud</groupId>            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>            <version>${spring.cloud.alibaba.version}</version>        </dependency>    </dependencies>

依赖说明如下:

provider-api :api接口声明

spring-cloud-starter:Spring Cloud核心包

spring-cloud-starter-dubbo:引入Spring Cloud Alibaba Dubbo

spring-cloud-starter-alibaba-nacos-discovery:基于nacos实现服务注册发现的artifactId

第二步,创建接口的实现类HelloServiceImpl,其中@DubboService是Dubbo服务的注解,表示当前服务会发布为一个远程服务​​​​​​​

@DubboServicepublic class HelloServiceImpl implements HelloService {
    private static final Logger logger = LoggerFactory.getLogger(HelloServiceImpl.class);
    @Override    public String hello(String name) {        logger.info("service impl param:{}",name);        return "Hello," + name + " welcome to AlwaysBeCoding!";    }}

第三步,在application.properties中配置dubbo相关信息​​​​​​​

spring.application.name=providerdubbo.scan.base-packages=cn.guoxiaolong.dubbodubbo.protocol.name=dubbodubbo.protocol.port=20882dubbo.protocol.host=100.149.40.112dubbo.registry.address=spring-cloud://localhostspring.cloud.nacos.discovery.server-addr=100.149.40.112:8848

其中spring.cloud.nacos.discovery.server-addr 为注册中心地址,这里我单机启动的注册中心(参考:Nacos快速开始安装使用),也可以采用高可用部署(基于Nacos实现高可用服务注册中心部署

第四步,创建启动类并启动服务​​​​​​​

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

查看注册中心,服务已经注册上去了

图片

实现Dubbo服务调用方

1、创建一个consumer的spring boot项目

第一步,增加web依赖,其他与服务提供方一致​​​​​​​

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-web</artifactId>    <version>${spring.boot.version}</version></dependency>

第二步,创建HelloController类,暴露一个hello服务,来消费Dubbo服务提供者的HelloService服务。​​​​​​​

@RestControllerpublic class HelloController {
    private static final Logger logger = LoggerFactory.getLogger(HelloController.class);
    @DubboReference    private HelloService helloService;
    @GetMapping("/hello")    public String hello(String name){        logger.info("controller param:{}"+name);        String result = helloService.hello(name);        logger.info("controller result:{}",result);        return result;    }}

第三步,创建启动类

@SpringBootApplication

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

第四步,在application.properties中配置dubbo相关信息​​​​​​​

spring.application.name=consumerdubbo.scan.base-packages=cn.guoxiaolong.dubbodubbo.protocol.name=dubbodubbo.protocol.port=20883dubbo.protocol.host=100.149.40.112dubbo.registry.address=spring-cloud://localhostspring.cloud.nacos.discovery.server-addr=100.149.40.112:8848

第五步,启动服务并测试调用

图片