2.1.1版本Spring-cloud + Dubbo + Nacos初试

一、主要组件

  • Nacos 服务注册与发现、配置中心
  • Dubbo 分布式服务框架

版本选择:2.1.1

二、项目架构

2.1.1版本Spring-cloud + Dubbo + Nacos初试_第1张图片

如图:

  • common-api : 存放 Dubbo 服务接口和模型定义
  • provider : 服务提供者
  • consumer : 服务消费者

三、项目搭建

1、创建父工程spring-cloud-alibaba-example

  1. 新建项目 file -> new project ..创建一个springboot项目
  2. 删除多余文件,只留下pom文件
  3. 修改pom文件,进行依赖版本管理


    4.0.0

    com.mlj
    snapup
    pom
    0.0.1-SNAPSHOT
    snapup

    
        consumer
        provider
        common-api
    

    
        1.8
        2.1.1.RELEASE
        Greenwich.SR5
        2.1.1.RELEASE
        1.8
        1.8
    

    
        
            
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring-boot.version}
                pom
                import
            
            
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                ${spring-cloud-alibaba.version}
                pom
                import
            
        
    

    
        
        
            org.projectlombok
            lombok
            provided
        
    

    
        ${project.name}
        
            
                src/main/resources
                true
            
        
        
            
                
                    org.springframework.boot
                    spring-boot-maven-plugin
                    ${spring-boot.version}
                
            
        
        
            
                maven-compiler-plugin
                3.8.0
                
                    ${maven.compiler.target}
                    ${maven.compiler.source}
                    UTF-8
                    true
                
            
        
    

    
        
            spring-milestones
            Spring Milestones
            https://repo.spring.io/libs-milestone
            
                false
            
        
    

2、创建common-api

存放 Dubbo 服务接口和模型定义

  1. 创建module,普通maven项目
  2. 创建接口和dto

SnaPupService:

public interface SnaPupService {

    /**
     * 接口
     *
     * @param s
     * @return
     */
    Result get(String s);
}

Result:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result implements Serializable {
    private String data;
}

pom:



    4.0.0

    
        com.mlj
        snapup
        0.0.1-SNAPSHOT
    

    common-api

2.1.1版本Spring-cloud + Dubbo + Nacos初试_第2张图片

3、nacos创建相关配置 

需要提前下载安装nacos,官方文档:https://nacos.io/zh-cn/docs/quick-start.html

  1.  创建命名空间

2.1.1版本Spring-cloud + Dubbo + Nacos初试_第3张图片

2.添加provider和consumer配置

2.1.1版本Spring-cloud + Dubbo + Nacos初试_第4张图片

4、创建服务提供者 provider

  1. 创建module 选择创建springboot项目
  2. 修改pom,引入相关依赖,如下
  3. 修改配置文件为bootstrap.yml yml格式,如下
  4. 启动类添加@EnableDubbo注解,开启注解Dubbo功能;添加@EnableDiscoveryClient注解,进行服务注册
  5. 创建SnaPupServiceImpl实现common-api的接口,完善接口功能,SnaPupServiceImpl类上需要@Service注解(org.apache.dubbo.config.annotation.Service)暴露服务


    4.0.0

    
        com.mlj
        snapup
        0.0.1-SNAPSHOT
    

    provider

    
        1.8
    

    
        
            com.mlj
            common-api
            0.0.1-SNAPSHOT
        

        
        
            org.springframework.boot
            spring-boot-starter
        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
        
            mysql
            mysql-connector-java
        


        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        

        
        
            com.alibaba.cloud
            spring-cloud-starter-dubbo
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


bootstrap.yml:

spring:
  application:
    name: @artifactId@
  cloud:
    nacos:
# nacos地址
      server-addr: ****
#服务注册与发现
      discovery:
# group和命名空间
        group: SNAPUP_GROUP
        namespace: 725d62dc-11f8-451d-ac7e-04427536de08
#配置中心
      config:
        group: SNAPUP_GROUP
        namespace: 725d62dc-11f8-451d-ac7e-04427536de08
        file-extension: yaml
        enable-remote-sync-config: true

5、创建服务消费者 consumer

  1. 创建module 选择创建springboot项目,如provider
  2. 修改pom,引入相关依赖,如provider
  3. 修改配置文件为bootstrap.yml yml格式,如provider
  4. 启动类添加@EnableDubbo注解,进行dubbo包扫描;添加@EnableDiscoveryClient注解,进行服务注册,如provider
  5. 创建SnaPupController接口,使用@Reference注解注入common-api的接口 来引用服务,进行调用。@RefreshScope注解会实时刷新${user.name}配置信息
@RestController
@RequestMapping("/snaPup")
@RefreshScope
public class SnaPupController {

    @Reference
    private SnaPupService snaPupService;

    @Value("${user.name}")
    private String name;

    @GetMapping("/get")
    public Result get() {
        return snaPupService.get(name);
    }
}

  三、测试组件可用性

  1. 依此启动provider、consumer服务

  2. 观察nacos客户端 ,可以看到刚启动的两个服务

  3. 请求接口http://localhost:8003/snaPup/get,访问成功

2.1.1版本Spring-cloud + Dubbo + Nacos初试_第5张图片

 2.1.1版本Spring-cloud + Dubbo + Nacos初试_第6张图片

四、问题与解决

1、警告信息:
Current application will subscribe all services(size:2) in registry, a lot of memory and CPU cycles may be used, thus it's strongly recommend you using the externalized property 'dubbo.cloud.subscribed-services' to specify the services

解决:dubbo.cloud.subscribed-services : provider 用于服务消费方订阅服务提供方的应用名称的列表,若需订阅多应用,使用 "," 分割。不推荐使用默认值为 "*",它将订阅所有应用,默认订阅所有应用。 

2、修改配置不会自动刷新

解决:通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新,官方文档有说明。https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

五、相关注解总结

@org.apache.dubbo.config.annotation.Service 暴露服务
@Reference 引用服务
@EnableDubbo 开启注解Dubbo功能
@EnableDiscoveryClient 开启服务注册发现功能
@RefreshScope 实现配置自动更新

六、参考文档

  1. nacos官方文档 https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
  2. dubbo官方文档 http://dubbo.apache.org/en-us/docs/user/quick-start.html
  3. dubbo相关 https://segmentfault.com/a/1190000018991721
  4. dubbo相关 https://www.jianshu.com/p/3090d63e9cb3

完整代码见github: https://github.com/menglinjie/spring-cloud-alibaba-example

你可能感兴趣的:(微服务)