1.什么是Nacos

Nacos是一个服务发现组件也是一个配置服务器,用于解决服务器之前相互发现的问题以及管理微服务的配置。

2.Nacos架构图

nacos 前端怎么连接java接口 nacos配置https_微服务

3.搭建Nacos

3.1 Nacos下载地址

https://github.com/alibaba/nacos

3.2 Nacos启动

https://nacos.io/zh-cn/docs/quick-start.html

3.2 Nacos本地访问

http://localhost:8848/nacos

4. Nacos 用法介绍前的准备内容

准备两个Spring Boot项目,分别命名为’blog-center’和’author-center’,版本要求是v2.6.x+。

5.将应用’blog-center’注册到Nacos

5.1 加依赖 pom.xml

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>0.9.0.RELEASE</version>
</dependency>

5.2 写配置 application.yml

spring: 
  cloud: 
    nacos: 
      discovery: 
        server-addr: localhost:8848
  application:
  # 服务名称尽量用-,不用_和特殊字符
  name: blog-center

5.3 启动项目

IntelliJ IDEA 查看:

nacos 前端怎么连接java接口 nacos配置https_nacos 前端怎么连接java接口_02


Nacos->服务管理->服务列表 查看:

nacos 前端怎么连接java接口 nacos配置https_spring_03

6.将应用’author-center’注册到Nacos

6.1 加依赖
同上
6.2 写配置 application.yml

spring: 
  cloud: 
    nacos: 
      discovery: 
        server-addr: localhost:8848
  application:
  # 服务名称尽量用-,不用_和特殊字符
  name: author-center
 server: 
  port:  8081

6.3 启动项目
  注意地址端口号是8081

7.重复启用应用’blog-center’

7.1 编辑器启动

Edit configurations->Modify options->Allow multiple instances->apply->ok

7.2 新增端口

spring: 
  cloud: 
    nacos: 
      discovery: 
        server-addr: localhost:8848
  application:
  # 服务名称尽量用-,不用_和特殊字符
  name: blog-center
server:
  port: 8888

提示:重复启动项目时前一个项目的不要关闭,不然只能发现一个微服务

8.blog-center 引入服务发现

8.1 编写方法

package com.ding.contentcenter;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class BlogCenterController {
    @Autowired
    private DiscoveryClient discoveryClient;
    /*
    * 测试:服务发现,博客内容中心总能找到作者中心
    * @return 作者中心所有实例的地址信息
    * */
    @GetMapping("demo")
    public List<ServiceInstance>getInstances(){
        // 查询指定服务的所有实例信息
        return this.discoveryClient.getInstances("author-center");
    }
}

8.2 请求

http://localhost:8081/demo

8.3 响应结果

[
    {
        "serviceId": "author-center", 
        "host": "192.168.31.156", 
        "port": 8888, 
        "secure": false, 
        "metadata": {
            "nacos.instanceId": "192.168.31.156#8888#DEFAULT#DEFAULT_GROUP@@author-center", 
            "nacos.weight": "1.0", 
            "nacos.cluster": "DEFAULT", 
            "nacos.healthy": "true", 
            "preserved.register.source": "SPRING_CLOUD"
        }, 
        "uri": "http://192.168.31.156:8888", 
        "instanceId": null, 
        "scheme": null
    }, 
    {
        "serviceId": "author-center", 
        "host": "192.168.31.156", 
        "port": 8080, 
        "secure": false, 
        "metadata": {
            "nacos.instanceId": "192.168.31.156#8080#DEFAULT#DEFAULT_GROUP@@author-center", 
            "nacos.weight": "1.0", 
            "nacos.cluster": "DEFAULT", 
            "nacos.healthy": "true", 
            "preserved.register.source": "SPRING_CLOUD"
        }, 
        "uri": "http://192.168.31.156:8080", 
        "instanceId": null, 
        "scheme": null
    }
]

结果:发现了2个‘author-center’微服务的端口实例。

9.从端口实例中发现微服务的地址和端口

9.1 BlogCenterController.java

package com.ding.contentcenter;

import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@RestController
public class BlogCenterController {
    private final DiscoveryClient discoveryClient;

    /*
    * 测试:从端口实例中发现微服务的地址和端口
    * @return String
    * */
    @GetMapping("demo1")
    public String getUrl(){
        List<ServiceInstance> instances = discoveryClient.getInstances("author-center");
        String targetURL = instances.stream()
                .map(instance -> instance.getUri().toString())
                .findFirst()
                .orElseThrow(()->new IllegalArgumentException("当前没有实例"));
        return targetURL;
    }
}

9.2 请求地址

http://localhost:8081/demo1

9.3 响应结果
http://192.168.31.156:8888

10.服务发现的领域模型

10.1领域模型图

nacos 前端怎么连接java接口 nacos配置https_微服务_04

10.2 模型说明

1.Namesapce(命名空间),实现隔离,默认public。
2. Group(分组),不同服务可以分到一个组,默认DEFUALT_GROUP。
3.Service(微服务)
4.Cluster(集群),是对指定一个微服务的虚拟划分,默认DEFAULT,可用于容灾,微服务A同时部署到苏州和上海的机房,苏州的博客中心和作者中心尽量相互调用,用于提高性能
5.Instance(微服务实例)

10.3写配置

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        # 指定命名空间
        namespace: ffb836dc-a7d1-4f4b-a804-56bc051ba4ax
        # 指定集群名称
        cluster-name: SUZHOU
11.Nacos元数据

11.1 作用

1.提供实例的描述信息
2.让微服务调用更灵活,例如微服务的版本控制

11.2 写配置

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
   		metadata:
   		  instance: fortest
   		  version: v1

参考 :《面向未来微服务:Spring Cloud Alibaba》

完毕,内容较多,如有不清楚的地方欢迎留言、多多交流!