【Spring Cloud Alibaba 温故而知新】(一)Alibaba Nacos

目录

4.1.1 Alibaba Nacos 的基本架构和概念

  • Alibaba Nacos 基本架构

    • 服务、配置服务、名字服务
  • Alibaba Nacos 概念解读

    • 服务注册中心:它是服务,实例以及元数据的数据库;服务注册中心可能会调用服务实例的健康检查 API 来验证它是否能够处理请求
    • 服务元数据:包括服务端点(endpoints)、服务标签、服务版本号、服务实例权重、路由规则、安全策略等描述服务的数据
    • 服务提供、消费方:提供可复用和可调用服务的应用方;会发起对某个服务调用的应用方
    • 配置:在系统开发过程中通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以及独立的配置文件的形式存在

4.1.2 Alibaba Nacos 单机部署(Linux版)

4.1.2.1 下载与运行 Nacos

  • 单机版本部署步骤
    • 下载你所需要的版本(最新)
      • https://github.com/alibaba/nacos/releases/
      • tar -zxvf nacos-server-2.0.3.tar.gz
      • 单机模式启动(默认配置)
[root@localhost bin]# ./startup.sh -m standalone
/usr/local/java/bin/java -Djava.ext.dirs=/usr/local/java/jre/lib/ext:/usr/local/java/lib/ext  -Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -Dnacos.member.list= -Xloggc:/opt/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/opt/nacos/plugins/health,/opt/nacos/plugins/cmdb -Dnacos.home=/opt/nacos -jar /opt/nacos/target/nacos-server.jar  --spring.config.additional-location=file:/opt/nacos/conf/ --logging.config=/opt/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
nacos is starting with standalone
nacos is starting,you can check the /opt/nacos/logs/start.out

然后,访问 http://192.168.3.250:8848/nacos 连接失败

查看日志 /opt/nacos/logs/start.out

cksdbjni5856883071013166985.so: libstdc++.so.6: cannot open shared object file: No such file or directory

执行安装解决

yum install libstdc++.i686

4.1.2.2 Web演示

访问 http://192.168.3.250:8848/nacos

初始账户:nacos/nacos

创建 sca-commerce 命名空间

在这里插入图片描述

4.1.3 Nacos 配置自定义的 MySQL 持久化

  • 修改配置,指定MySQL地址、用户名、端口号

4.1.3.1 准备 MySQL 数据库

  • 安装 docker & docker-compose
  • 运行 docket-compose
  • 登录容器修改 root 密码

参考:https://hub.docker.com/_/mysql

不是这里的专门内容,所以贴一下步骤:

# 进入 mysql 容器
docker exec -it mysql bash 

# 登录 mysql, 第一次密码是空,直接回车
mysql -uroot -p

# mysql8 修改密码
use mysql; 
update user set authentication_string='' where user='root';
ALTER user 'root'@'localhost' IDENTIFIED BY '123456';

# 修改帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入MySQL后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"
select host from user where user='root';
update user set host = '%' where user ='root';
flush privileges;

本人尝试过单机部署时候 mysql:8 能启动, 在集群模式下会报错的, 建议用 MySQL5.7

4.1.3.2 修改 Nacos 配置,指定 MySQL 持久化

vim /opt/nacos/conf/application.properties

#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456

4.1.3.3 运行 SQL语句

Nacos官方已经为我们提供了 nacos-mysql.sql 语句文件

[root@localhost conf]# ll
total 88
-rw-r--r--. 1 502 games  1224 Jun 17 22:39 1.4.0-ipv6_support-update.sql
-rw-r--r--. 1 502 games  9496 Oct 27 03:11 application.properties
-rw-r--r--. 1 502 games  9506 Jul 27 02:18 application.properties.example
-rw-r--r--. 1 502 games   670 Mar 17  2021 cluster.conf.example
-rw-r--r--. 1 502 games 31156 Jul 15 07:19 nacos-logback.xml
-rw-r--r--. 1 502 games 10660 Jun 17 22:39 nacos-mysql.sql
-rw-r--r--. 1 502 games  8795 Jun 17 22:39 schema.sql

https://github.com/eddie-code/sca-commerce/blob/develop/nacos-mysql.sql

https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql

4.1.3.4 重新运行 Nacos

关闭之前启动 Nacos, 再次运行 Nacos

cd /opt/nacos/bin
./shutdown.sh
./startup.sh -m standalone 

新建一个命名空间,查看是否成功

在这里插入图片描述

4.2.1 Alibaba Nacos 集群化部署(Linux版)

  • 集群化部署 Alibaba Nacos 的步骤
    • 定义集群部署的 IP 和 端口,即 cluster.conf 文件
    • 集群必须要使用可以共同访问(例如:MySQL、PG等等)到的数据源作为持久化方式
    • 集群化启动没有额外的参数:./startup.sh

至少需要三个 Nacos 节点

4.2.1.1 修改 cluster.conf 文件

复制 example

cd /opt/nacos/conf/
cp cluster.conf.example cluster.conf

vim cluster.conf

192.168.3.250:8848
192.168.3.250:8858
192.168.3.250:8868

4.2.1.2 创建 Nacos 节点

拷贝 nacos 文件夹
[root@localhost opt]# ll
total 314696
drwxr-xr-x. 7 root root        96 Oct 27 00:52 nacos
-rw-r--r--. 1 root root 117593603 Oct 27 00:49 nacos-server-2.0.3.tar.gz
[root@localhost opt]# 
[root@localhost opt]# cp -r nacos nacos-8848
[root@localhost opt]# cp -r nacos nacos-8858
[root@localhost opt]# cp -r nacos nacos-8868
[root@localhost opt]# ll
total 314696
drwxr-xr-x. 7 root root        96 Oct 27 00:52 nacos
drwxr-xr-x. 7 root root        96 Oct 27 04:30 nacos-8848
drwxr-xr-x. 7 root root        96 Oct 27 04:30 nacos-8858
drwxr-xr-x. 7 root root        96 Oct 27 04:30 nacos-8868
-rw-r--r--. 1 root root 117593603 Oct 27 00:49 nacos-server-2.0.3.tar.gz
[root@localhost opt]# 
修改 application.properties 的端口

vim /opt/nacos-8858/conf/application.properties

server.port=8858

vim /opt/nacos-8868/conf/application.properties

server.port=8868

4.2.1.3 执行三个 Nacos 节点的启动脚本

vim nacos-cluster-startup.sh

sh /opt/nacos-8848/bin/startup.sh
sh /opt/nacos-8858/bin/startup.sh
sh /opt/nacos-8868/bin/startup.sh

chmod 777 nacos-cluster-startup.sh

关闭脚本也是一样操作

进入 Web 查看:http://192.168.3.250:8848/nacos
在这里插入图片描述

4.3.1 Alibaba Nacos Client服务注册与发现

4.3.1.1 服务注册

创建 Nacos Client 子项目

工程名:sca-commerce-alibaba-nacos-client

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>sca-commerce</artifactId>
        <groupId>com.edcode.commerce</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>sca-commerce-alibaba-nacos-client</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <!-- 模块名及描述信息 -->
    <name>sca-commerce-alibaba-nacos-client</name>
    <description>Nacos Client</description>

    <dependencies>
        <!-- spring cloud alibaba nacos discovery 依赖 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.edcode.commerce</groupId>
            <artifactId>sca-commerce-mvc-config</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <!--
        SpringBoot的Maven插件, 能够以Maven的方式为应用提供SpringBoot的支持,可以将
        SpringBoot应用打包为可执行的jar或war文件, 然后以通常的方式运行SpringBoot应用
     -->
    <build>
        <finalName>${artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <!-- 配置远程仓库 -->
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

</project>

NacosClientApplication 启动类

package com.edcode.commerce;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @author eddie.lee
 * @blog blog.eddilee.cn
 * @description Nacos Client 工程启动入口
 */
@EnableDiscoveryClient
@SpringBootApplication
public class NacosClientApplication {

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

}

bootstrap.yml

server:
  port: 8000
  servlet:
    context-path: /scacommerce-nacos-client

spring:
  application:
    name: sca-commerce-nacos-client # 应用名称也是构成 Nacos 配置管理 dataId 字段的一部分 (当 config.prefix 为空时)
  cloud:
    nacos:
      # 服务注册发现
      discovery:
        enabled: true # 如果不想使用 Nacos 进行服务注册和发现, 设置为 false 即可
        #server-addr: ${NACOS_ADDR:127.0.0.1}:8848
        server-addr: ${NACOS_ADDR:127.0.0.1}:8848,${NACOS_ADDR:127.0.0.1}:8849,${NACOS_ADDR:127.0.0.1}:8850 # Nacos 服务器地址
        namespace: ${NAMESPACE_ID:1adcfdd8-5763-4768-9a15-9c7157988950}

# 暴露端点
management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always

启动项目,在查看 Nacos Web

在这里插入图片描述

4.3.1.2 服务发现

NacosClientService

package com.edcode.commerce.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author eddie.lee
 * @blog blog.eddilee.cn
 * @description
 */
@Slf4j
@Service
public class NacosClientService {

    private final DiscoveryClient discoveryClient;

    public NacosClientService(DiscoveryClient discoveryClient) {
        this.discoveryClient = discoveryClient;
    }

    /**
     * 打印 Nacos Client 信息到日志
     * @param serviceId
     * @return
     */
    public List<ServiceInstance> getNacosClientInfo(String serviceId) {
        log.info("request nacos client to get service instance info: [{}]", serviceId);
        return discoveryClient.getInstances(serviceId);
    }

}

NacosClientController

package com.edcode.commerce.controller;

import com.edcode.commerce.service.NacosClientService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author eddie.lee
 * @blog blog.eddilee.cn
 * @description
 */
@Slf4j
@RestController
@RequestMapping("/nacos-client")
@RequiredArgsConstructor
public class NacosClientController {

    private final NacosClientService nacosClientService;

    /**
     * 根据 service id 获取服务所有的实例信息
     */
    @GetMapping("/service-instance")
    public List<ServiceInstance> logNacosClientInfo(@RequestParam(defaultValue = "sca-commerce-nacos-client") String serviceId) {
        log.info("coming in log nacos client info: [{}]", serviceId);
        return nacosClientService.getNacosClientInfo(serviceId);
    }

}

使用 IDEA 或者 PostMan请求 API

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 1 University students can understand innovation through learning from the past. 2. Students can better review by breaking down complex concepts into smaller components and studying the material in an organized way. 3. When learning from the past to understand innovation, it is important to focus on understanding the big picture and to not get bogged down in the details. ### 回答2: 1. 大学生如何理解故而故而是一种学习方法,它要求我们在学习识之前先回顾和巩固已经学过的识。大学生理解故而意味着要在学习识之前,先回顾和复习以前学过的相关识或基础识。通过故,我们能够加深对已有识的理解和记忆,从而更好地理解和掌握识。 2. 学生如何更好地去复习? 学生要更好地复习,可以采取以下策略: 首先,制定一个合理的复习计划,将要复习的内容分配到不同的时间段,确保每个科目都有足够的时间。 其次,采用多种复习方法,如阅读教材、做练习题、参加讨论等,以帮助加深理解和牢固记忆。 另外,与同学或老师一起讨论复习内容,通过讲解和互动来加深理解。 此外,保持良好的学习习惯,比如及时复习、做好笔记等,能够帮助学生更好地掌握和复习识。 3. 故而的过程需要注意什么? 在故而的过程中,需要注意以下几点: 首先,要有针对性,根据自己的学习需求和复习目标,选择性地回顾和复习相关识点。 其次,要有系统性,将复习内容进行分类整理,形成一个清晰的识框架,有助于加深理解和记忆。 另外,要关注重难点,重点复习那些相对较难或容易遗忘的识点,加强对这些内容的学习和理解。 还要有耐心和恒心,故而是一个持续的过程,需要长期坚持和不断巩固。 最后,要善于总结和归纳,通过整理和回顾复习过程中的笔记和练习,提炼出关键概念和思维模式,便于记忆和应用。 ### 回答3: 1. 大学生如何理解故而? 大学生可以理解为通过回顾过去的识和经验,来获取的见解和理解。故是指回顾已经学过的识,了解其中的原理、概念和重要点。而则是指通过对识的学习,扩展和更自己的识体系。故而相辅相成,是一个持续学习和发展的过程。 2. 学生如何更好地去复习? 学生可以通过以下方式更好地进行复习: - 制定合理的复习计划:根据时间安排和课程难度,合理分配复习时间,确保每个学科都有足够的复习时间。 - 多种复习方法结合:采用不同的学习方式,如阅读教材、做练习题、参与讨论、制作思维导图等,帮助巩固记忆和理解识。 - 主动参与课堂:积极参与讨论和提问,与同学和老师交流,加深对识的理解和记忆。 - 不断反思和总结:及时检查自己的复习情况,发现不足和问题,并及时调整学习方法和计划。 3. 故而的过程需要注意什么? 在故而的过程中,学生需要注意以下几点: - 有目的性地故:针对具体的识点或者问题进行回顾,明确自己的学习目标和重点。 - 理解和记忆结合:不仅要理解概念和原理,还要通过多次的复习和记忆,帮助信息在大脑中形成长期记忆。 - 理论联系实际:将学到的识应用到实际情境中,加深对识的理解和记忆。 - 及时巩固复习成果:通过做练习题、整理笔记、与同学讨论等方式,巩固复习的成果,确保识掌握得更牢固。 - 长期持续学习:故而是一个持续的过程,要保持学习的热情和动力,不断更自己的识体系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

eddie_k2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值