微服务-springcloud概览 +(eureka实践, nacos实践)

Spring 体系图

在这里插入图片描述

版本关系

在这里插入图片描述

版本对应关系wiki

eureka 实践

1 父工程依赖

    org.springframework.boot
    spring-boot-starter-parent
    2.6.14


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

2 搭建Eureka Server

    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-server

server:
  port: 8761
eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: 

3 搭建服务提供者

    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client


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

eureka:
  client:
    serviceUrl:
      defaultZone: http://127.0.0.1:8761/eureka/

spring:
  application:
    name: eureka-provider
server:
  port: 9000

4 搭建消费者

    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client


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

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
spring:
  application:
    name: eureka-consumer
server:
  port: 9001

5 服务消费方

5.1 使用RestTemplate 进行RPC调用

@Bean
@LoadBalanced
public RestTemplate restTemplate(){
    return new RestTemplate();
}

5.2 真实调用

@GetMapping("/hello/{id}")
public String hello(@PathVariable String id){
    return restTemplate.getForObject("http://EUREKA-PROVIDER/hello/"+id, String.class);
}

注意:

@LoadBalanced这个注解一定要加上(org.springframework.cloud.client.loadbalancer)

集群模式:

https://cloud.tencent.com/developer/article/1730733

Naco 实践

1 首先我们需要安装 Nacos Server

可以选用Docker ,但是一定得注意哈这里会有坑,需要暴露三个端口:

在这里插入图片描述

docker run -d -p 8848:8848 -p 9848:9848  -p 9849:9849  --name nacos -e "MODE=standalone" -e NACOS_AUTH_IDENTITY_KEY=serverIdentity -e NACOS_AUTH_IDENTITY_VALUE=security -e NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789 nacos/nacos-server

2 父POM

  org.springframework.boot
  spring-boot-starter-parent
  
  2.4.2


  
    
      com.alibaba.cloud
      spring-cloud-alibaba-dependencies
      2021.1
      pom
      import
    
  

3 服务提供者

server:
  port: 8088
spring:
  application:
    name: ddd-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-discovery


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

4 服务消费者

server:
  port: 8089
  application:
    name: ddd-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
       com.alibaba.cloud
       spring-cloud-starter-alibaba-nacos-discovery
   
   
       org.springframework.boot
       spring-boot-starter-web
   
   
       org.springframework.cloud
       spring-cloud-starter-loadbalancer
       3.0.1
   

5 调用方式和上面的一样,使用负载均衡的RestTemplate 进行调用

Nacos 配置管理

1 父工程依赖

 
   
     
       com.alibaba.cloud
       spring-cloud-alibaba-dependencies
       ${com.alibaba.cloud.version}
       pom
       import
     
     
       org.springframework.cloud
       spring-cloud-dependencies
       ${com.cloud.version}
       pom
       import
     
     
     
       com.alibaba.cloud
       spring-cloud-starter-dubbo
       ${com.dubbo.version}
     
   
 
 
 
   
   
     com.alibaba.nacos
     nacos-common
     2.1.0
   

在这里插入图片描述

2 具体模块,引入依赖

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

3 配置bootstrap.yml

在这里插入图片描述

写在上面application.yml在较高的版本据说也可以,但是我没有成功,后面测试一下来补充吧。

spring:
  application:
    name: nacos-dynamic-port
  cloud:
    nacos:
      config:
        server-addr:ip:8848
        file-extension: yml  #这个名字可以自定义 与 配置列表对应就行 官网也有一套命名规则
        namespace: 459c3b94-04e8-4de2-8eaa-c55f4a8de1b1 #这里需填工作空间的ID
        group: DEFAULT_GROUP

命名規則:

在这里插入图片描述

配置列表:

在这里插入图片描述

4 验证 你可以在nacos里面修改端口,然然后启动,发现你配置的端口会生效:

@RestController
@RefreshScope 、// 这个注解别忘了这个提供了bean刷新属性的能力
public class ConfigController {

    @Value("${server.port}")
    private int port;
    @RequestMapping("/info")
    public String get() {
        return "NacosDynamicPortController output, port: " + port;
    }
}

修改不同的端口发现info会打印不同的端口,但是特别注意哈我们一般不用来更新端口,因为这个端口改了,但是服务还是在原端口提供服务的

在这里插入图片描述

Nacos 拓展配置

1 依赖 和上面一样的 这里不在赘述。

2 配置这里是必须配置在 bootstrap.yml里面。

spring:
  application:
    name: nacos-dynamic-env
  cloud:
    nacos:
      config:
        server-addr: 192.168.0.169:8848
        file-extension: properties
        namespace: 459c3b94-04e8-4de2-8eaa-c55f4a8de1b1
        group: DEFAULT_GROUP
        extension-configs[0]:
          dataId: demo
          refresh: true
          fileExtension: yml
          group : DEFAULT_GROUP
        extension-configs[1]:
          dataId: user
          refresh: true
          fileExtension: yml
          group : DEFAULT_GROUP

在这里插入图片描述

在这里插入图片描述

@RestController
@RefreshScope
public class ConfigController {
    @Value("${server.port}")
    private int port;
    @Value("${demo.val}")
    private String val;
    @Value("${demo.pwd}")
    private String pwd;
    @RequestMapping("/info")
    public String get() {
        return String.format("ConfigController output, port : {%s} val : {%s} pwd : {%s}", port, val, pwd);
    }
}

最后输出:可以看到相同的属性后面的配置会覆盖前面。

在这里插入图片描述

强烈推荐看一下这篇博文,做了更详细的讲解

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/6356324ec1.html