Nacos 服务发现 快速入门
一、Nacos 服务发现 – 什么是服务发现 ?
1、 Nacos 服务发现-什么是服务发现
在微服务架构中,整个系统会按职责能力划分为多个服务,通过服务之间协作来实现业务目标。
这样在我们的代码中免不了要进行服务间的远程调用,服务的消费方要调用服务的生产方,
为了完成一次请求,消费方需要知道服务生产方的网络位置(IP地址和端口号)。
2、目前市面上用的比较多的服务发现中心有:
Nacos, Eureka, Consul, Zookeeper
3、nacos 简介:
<a name="anchor1-3"></a>
nacos 是阿里的一个开源产品,它是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。
4、nacos 特性:
<a name="anchor1-4"></a>
1)服务发现与服务健康检查。
2)动态配置管理。
3)动态 DNS 服务。
4)服务和元数据管理。
二、Nacos 服务发现–快速入门–SpringCloud 服务协作流程
1 、spring cloud 常见的集成方式是:
使用 Feign + Ribbon 技术来完成服务间远程调用及负载均衡的。
2 、负载均衡:
负载均衡就是将用户请求(流量)通过一定的策略,分摊到多个服务实例上执行,
它是系统处理高并发、缓解网络压力和进行服务端扩容的重要手段之一。
1)服务端负载均衡:如:Nginx
2)客户端负载均衡:如:Ribbon
3、Feign 介绍:
Feign 是 Netflix 开发的声明式、模板化的 HTTP 客户端,Feign 可以帮助我们更快捷、优雅地调用 HTTP API.
Feign 的英文表意为“假装、伪装、变形”,可以理解为将 HTTP 报文请求方式伪装为简单的 java 接口调用方式。
三、Nacos 服务发现–快速入门–服务生产者
1、 搭建 nacos 服务端
下载解压安装 nacos-1.1.3,并启动独立服务 startup.cmd -m standalone
2、打开 idea 创建一个父 Maven 工程 nacos_discovery 工程,为了规范依赖的版本。创建两个子模块( 服务提供者模块 provider, 服务消费者模块 consumer )。
–> idea
–> File
–> New Project
–> Maven
–> Groupld : ( djh.it )
Artifactld : ( nacos_discovery )
Version : 1.0-SNAPSHOT
–> Next
–> Project name: ( nacos_discovery )
Project location: ( C:\java-test\idea2019\nacos_discovery )
–> Finish
(父工程不编写代码,可以删除 src 目录)
3、 在 父工程的 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>djh.it</groupId>
<artifactId>nacos_discovery</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
<!-- C:\java-test\idea2019\nacos_discovery\pom.xml -->
4、 新增 quickstart_provider, quickstart_consumer 子工程(子模块),
创建两个子模块:
--> 右键 nacos_discovery 父工程
--> Modules
--> Maven
--> Groupld : ( djh.it )
Artifactld : ( quickstart_provider )
Version : 1.0-SNAPSHOT
--> Next
--> Module name: ( quickstart_provider )
Content root : ( C:\java-test\idea2019\nacos_discovery\quickstart_provider )
Module file location: ( C:\java-test\idea2019\nacos_discovery\quickstart_provider )
--> Finish
--> 右键 nacos_discovery 父工程
--> Modules
--> Maven
--> Groupld : ( djh.it )
Artifactld : ( quickstart_consumer )
Version : 1.0-SNAPSHOT
--> Next
--> Module name: ( service1 )
Content root : ( C:\java-test\idea2019\nacos_discovery\quickstart_consumer )
Module file location: ( C:\java-test\idea2019\nacos_discovery\quickstart_consumer )
--> Finish
5、在子工程 quickstart_provider, quickstart_consumer 的 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>nacos_discovery</artifactId>
<groupId>djh.it</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>quickstart_provider</artifactId>
<dependencies>
<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-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
</project>
<!-- C:\java-test\idea2019\nacos_discovery\quickstart_provider\pom.xml -->
6、创建 配置文件 application.yml
## C:\java-test\idea2019\nacos_discovery\quickstart_provider\src\main\resources\application.yml
server:
port: 56010 # 启动端口
spring:
application:
name: quickstart_provider
cloud:
nacos:
# config: # 表示配置管理
discovery: # 表示服务发现
server-addr: 127.0.0.1:8849
logging:
level:
root: info
org.springframework: info
7、在 服务提供者模块 quickstart_provider 子工程中,编写 Controller
创建 ProviderController.java 类。
/**
* C:\java-test\idea2019\nacos_discovery\quickstart_provider\src\main\java\djh\it\nacos\controller\ProviderController.java
*
* 2024-4-3 服务提供者 provider Controller
*/
package djh.it.nacos.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProviderController {
private static final Logger LOG = LoggerFactory.getLogger(ProviderController.class);
@GetMapping("/service")
public String service(){
LOG.info("provider invoke");
return "provider invoke";
}
}
8、在 服务提供者模块 quickstart_provider 子工程中,创建启动类 NacosProviderApp.java。
/**
* C:\java-test\idea2019\nacos_discovery\quickstart_provider\src\main\java\djh\it\nacos\NacosProviderApp.java
*
* 2024-4-3 服务提供者 启动类 NacosProviderApp.java
*/
package djh.it.nacos;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient //引入服务发现客户端
@EnableFeignClients //引入远程调用客户端
public class NacosProviderApp {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApp.class, args);
}
}
9、浏览器地址栏输入:http://127.0.0.1:8848/nacos/
点击 【服务管理】–> 【服务列表】
会发现如下界面: