SC Nacos 服务注册和发现202107

1、Nacos本地安装和启动

git clone https://github.com/alibaba/nacos.git

inux/Unix/Mac系统
启动命令(standalone代表着单机模式运行,非集群模式):

 sh startup.sh -m standalone

 

 

Windows系统

启动命令:cmd startu.cmd

由于在1.3.2之后默认使用的【集群方式】启动我们要手动改回单机模式,如果你非要用高版本,需要修改启动命令,改为【单机模式】右键点击startup.cmd选择编辑

Nacos启动失败问题

https://blog.csdn.net/qq_41965041/article/details/113714859

或者双击startup.cmd运行文件

应用启动之后,访问 http://127.0.0.1:8848/nacos/,Nacos0.8 版本已经支持简单登录功能,默认用户名/密码为: nacos/nacos。

 

2、集成 Spring Cloud 服务发现

1)、服务提供者 provider2004

       i)、 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sc</groupId>
<artifactId>provider2004</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>provider2004</name>
<description>Demo project for Spring Boot</description>

  <properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    <spring-cloud-alibaba.version>2.2.2.RELEASE</spring-cloud-alibaba.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-validation</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-alibaba-nacos-discovery</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

</project>

  ii)、 application.properties 注册到 Nacos

    # 应用名称
    spring.application.name=provider2004
    # 应用服务 WEB 访问端口
    server.port=2004
    # Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
    # Nacos认证信息
    spring.cloud.nacos.discovery.username=nacos
    spring.cloud.nacos.discovery.password=nacos
    # Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
    spring.cloud.nacos.discovery.server-addr=http://127.0.0.1:8848
    # 注册到 nacos 的指定 namespace,默认为 public
    spring.cloud.nacos.discovery.namespace=public

 iii)、 Provider2004Application 启动类

    @EnableDiscoveryClient
    @RestController
    @SpringBootApplication
    public class Provider2004Application {

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

    @RequestMapping(value = "/hello/{string}",method = RequestMethod.GET)
    public String echo(@PathVariable String string){
      return " from provider2004 Hello "+string;
    }
}

 

2)、服务消费者-ribbon  consumer2005

  i)、 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.sc</groupId>
    <artifactId>consumer2005</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>consumer2005</name>
    <description>Demo project for Spring Boot</description>

  <properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    <spring-cloud-alibaba.version>2.2.2.RELEASE</spring-cloud-alibaba.version>
    <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
  </properties>

  <dependencies>
      <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    </dependency>
      <dependency>
      <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.7.RELEASE</version>
<configuration>
<mainClass>com.sc.consumer2005.Consumer2005Application</mainClass>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

</project>

   ii)、 application.properties 订阅到 Nacos

    spring.application.name=consumer2005
    # 应用服务 WEB 访问端口
    server.port=2005
    # Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
    # Nacos认证信息
    spring.cloud.nacos.discovery.username=nacos
    spring.cloud.nacos.discovery.password=nacos
    # Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
    spring.cloud.nacos.discovery.server-addr=http://127.0.0.1:8848
    # 注册到 nacos 的指定 namespace,默认为 public
    spring.cloud.nacos.discovery.namespace=public

      iii)、启动类,调用提供者

    @EnableDiscoveryClient
    @SpringBootApplication
    public class Consumer2005Application {

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

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

  iiii)、RestTemplate调服

  @RestController
  public class TestController {

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping(value = "/hello/{str}",method = RequestMethod.GET)
      public String echo(@PathVariable String str){
      return restTemplate.getForObject("http://provider2004/hello/"+str,String.class);
    }
  }

    注:参考如下服务名

 --------------------------------------------------------------------------------------------------------------------------------------------

3)、服务消费者-feign  consumer2006

       sentinel+feign降级处理实例

  i)、 pom.xml

<modelVersion>4.0.0</modelVersion>
  <groupId>com.sc</groupId>
  <artifactId>consumber2006</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>consumber2006</name>
  <description>Demo project for Spring Boot</description>

  <properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    <spring-cloud-alibaba.version>2.2.2.RELEASE</spring-cloud-alibaba.version>
    <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      <exclusions>
        <exclusion>
        <groupId>org.junit.vintage</groupId>
        <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>

  <dependencyManagement>
    <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-dependencies</artifactId>
      <version>${spring-cloud.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-dependencies</artifactId>
      <version>${spring-boot.version}</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>${spring-cloud-alibaba.version}</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    </dependencies>
  </dependencyManagement>

   ii)、 application.properties 订阅到 Nacos

    # 应用名称
    spring.application.name=consumber2006
    # 应用服务 WEB 访问端口
     server.port=2006
    # Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
      # Nacos认证信息
    spring.cloud.nacos.discovery.username=nacos
    spring.cloud.nacos.discovery.password=nacos
    # Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
    spring.cloud.nacos.discovery.server-addr=http://127.0.0.1:8848
    # 注册到 nacos 的指定 namespace,默认为 public
    spring.cloud.nacos.discovery.namespace=public

    #启用sentinel
    feign.sentinel.enabled=true
    #哨兵
    spring.cloud.sentinel.transport.dashboard=localhost:2008

      iii)、启动类Consumber2006Application 

       

    @EnableDiscoveryClient
    @EnableFeignClients
    @SpringBootApplication
    public class Consumber2006Application {

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

    }

         iiii)、interfaceFeign   TestFeignClient

    @Primary
    @FeignClient(name="provider2004",fallback =TestFeignClientFallback.class)
    public interface TestFeignClient {

    @RequestMapping(value = "/hello/{string}",method = RequestMethod.GET)
      public String echo(@PathVariable(value="string") String string);
    }

  

注:参考如下服务名

iiiii)、Controller    TestFeignClientFallback 

    @Component
    public class TestFeignClientFallback implements TestFeignClient{
    @Override
      public String echo(String string) {
      return " from provider2004 error ";
      }
    }

iiiiii)、Controller      feignController 

  @RestController
  public class feignController {

    @Autowired
    private TestFeignClient testFeignClient;

    @RequestMapping(value = "/hello/{str}",method = RequestMethod.GET)
    public String echo(@PathVariable String str){
      return testFeignClient.echo(str);
    }
  }

...........................................

  注:sentinel安装

   i)、下载:https://github.com/alibaba/Sentinel/releases/download/1.8.2/sentinel-dashboard-1.8.2.jar

   ii)、启动  端口:2008   ,默认用户密码 sentinel/sentinel

       java -Dcsp.sentinel.api.port=2009   -Dserver.port=2008 -Dcsp.sentinel.dashboard.server=localhost:2008  -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.2.jar

  

Spring Cloud 服务注册和发现组件

spring cloud alibaba sentinel+feign降级处理实例

                                                                                                                                                                                  

原文地址:https://www.cnblogs.com/smallfa/p/15078361.html