IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> SpringCloudAlibaba - 整合 Nacos 实现服务注册与发现 -> 正文阅读

[PHP知识库]SpringCloudAlibaba - 整合 Nacos 实现服务注册与发现

前言

记录下Nacos的整合过程

环境

Win 10 + Spring Cloud 2020.0.1 + Spring Cloud Alibaba 2021.1 + Nacos 2.0.0


Nacos是什么?

  • Nacos是一个服务发现组件,也是一个配置服务器,Nacos解决的两个问题:
1、服务A怎么找到服务B 
2、管理微服务的配置

在这里插入图片描述



服务发现原理

  • 服务发现机制
    服务发现机制就是服务消费者总能找到服务提供者的机制,举个例子:服务发现就像手机中的名片夹,记录一个人所有的联系方式,通过该名片可以联系到某个人,而当某个联系方式不存在时(服务DOWN)就将其从名片夹中删除。

  • 用于生产的服务发现机制:
    1、在微服务上做缓存,定时任务发送当前的地址,调用时取缓存中微服务的地址,该做法好处首先是压力小,不用每次都去实时取,其次是即使服务发现组件崩溃也可以取到缓存中的值,只是无法更新缓存中的值。
    2、每个微服务实例都向服务发现组件发送心跳(即一次请求),告诉服务发现组件自己是活着的,如果服务发现组件发现某一个实例长时间未向自己发送心跳,即认为该实例已挂,将其健康状态标记为DOWN,服务消费者即不再调用该实例。


搭建 Nacos Server

Nacos Server 下载地址

https://github.com/alibaba/nacos/releases


Nacos Server 的版本选择

Nacos Server的版本选择参照标准在spring-cloud-alibaba-dependencies-xxx.pom中有记录,如我的Spring Cloud Alibaba的版本是2021.1,其推荐的版本是1.4.1(生产环境优先选择)
在这里插入图片描述
由于我这里是开发环境,我选择的版本是2.0.0


运行 Nacos Server

startup.cmd -m standalone

在这里插入图片描述

  • 访问http://localhost:8848/nacos/#/login(默认端口是8848)

在这里插入图片描述

  • 默认登录账号/密码:nacos/nacos

在这里插入图片描述


... Nacos Server 搭建完毕

Nacos Client 注册

user-center 用户中心微服务注册

  • 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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.coisini</groupId>
    <artifactId>user-center</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>user-center</name>
    <description>user-center project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>2020.0.1</spring-cloud.version>
        <spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--spring-cloud-starter-{spring cloud子项目的名称}-[{模块名称}]-->
        <!-- nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <!-- 整合spring cloud -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- 整合spring cloud alibaba -->
            <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.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
  • application.yml
spring:
  application:
    # 服务名称
    name: user-center
  cloud:
    nacos:
      discovery:
        # 指定nacos server的地址
        server-addr: localhost:8848
  • 启动项目
  • 访问Nacos

在这里插入图片描述


content-center 内容中心微服务注册

  • pom.xml依赖同上
  • application.yml
spring:
  application:
    # 服务名称
    name: content-center
  cloud:
    nacos:
      discovery:
        # 指定nacos server的地址
        server-addr: localhost:8848
  • 访问Nacos

在这里插入图片描述



服务发现测试

  • 内容中心编写测试代码
@RestController
public class TestController {

    @Autowired
    private DiscoveryClient discoveryClient;

    /**
     * 测试:服务发现,证明内容中心总能找到用户中心
     * @return 用户中心所有实例的地址信息
     */
    @GetMapping("test")
    public List<ServiceInstance> getInstances() {
        // 查询指定服务的所有实例的信息
        return discoveryClient.getInstances("user-center");
    }
}
  • 如下所示,内容中心可以获取到用户中心所有实例的地址信息

在这里插入图片描述



测试用例

内容中心调用用户中心的实例


user-center

  • TestController.java
@RestController
public class TestController {

    @GetMapping("/test/{name}")
    public String test(@PathVariable String name) {
        return "hello " + name;
    }

}

content-center

  • TestController.java
@RestController
@Slf4j
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class TestController {

    private final DiscoveryClient discoveryClient;
    private final RestTemplate restTemplate;

    @GetMapping("test1")
    public String test1() {
        // 用户中心所有实例信息
        List<ServiceInstance> instances = discoveryClient.getInstances("user-center");
        String targetUrl = instances.stream()
                .map(instance -> instance.getUri().toString() + "/test/{name}")
                .findFirst()
                .orElseThrow(() -> new IllegalArgumentException("当前没有实例"));

        log.info("目标地址:{}", targetUrl);

        // 调用用户微服务获取用户信息
        return restTemplate.getForObject(
                targetUrl,
                String.class,
                "Coisini"
        );
    }
}

测试结果


在这里插入图片描述



- End -
白嫖有风险
点赞加收藏
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:26:09  更:2021-09-22 14:27:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:36:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码