Spring Cloud Alibaba Nacos_配置中心与服务发现(六)–综合架构实战(1)

一、Nacos 服务发现-Spring Cloud Alibaba 综合架构实战-总体架构介绍

1、spring cloud 是一个较为全面的微服务框架集。

spring cloud 集成了如服务注册发现、配置中心、消息总线、负载均衡、断路器、API 网关等功能实现。

2、阿里巴巴的 Dubbo 只是服务治理与 RPC 实现方案。

3、传统的 spring cloud 应用,使用 Ribbon 或 Feign 在微服务之间协作。

Feign 是基于 Http Restful 的调用,在高并发下的性能不够理想。

4、spring cloud alibaba 集成 Nacos 与 spring cloud 应用,它的组件说明:

1)API 网关:系统统一入口,屏蔽架构内部结构,统一安全拦截,采用 Zuul 实现。
2)application-1 :应用1,模拟应用,提供 http 接口服务。
3)service-1 :微服务1,模拟微服务,提供 dubbo 接口服务。
4)service-2 :微服务2,模拟微服务,提供 dubbo 接口服务。

5、spring cloud alibaba 调用流程:

所有访问系统的请求,都要经过网关,网关转发 Http 请求至 application-1
application-1 使用 dubbo 调用 service-1 完成自身业务,而后 service-1 调用 service-2 完成自身业务。至此,完成所有组件贯穿。

   nacos-server-17.png


二、Nacos 服务发现-Spring Cloud Alibaba 综合架构实战-创建工程结构

1、工程结构:采用 maven 工程

1)nacos-micro-service 整体父工程
2)api-gateway API 网关,端口:56010
3)application-1 应用1,端口:56020
4)service-1 服务1父工程
5)service-1-api 服务1 API
6)service-1-server 服务1 实现,端口:56030
7)service-2 服务2父工程
8)service-2-api 服务2 API
9)service-2-server 服务2 实现,端口:56040

2、创建父工程

创建 artifactId 名为 nacos-micro-service 的 maven 工程,此父工程继承 nacos-discovery 父工程,间接指定了 spring boot, spring cloud 以及 spring-cloud-alibaba 的依赖版本。

--> 右键 nacos_discovery 父工程
--> Modules 
--> Maven 
--> Groupld : ( djh.it )
	Artifactld : ( nacos-micro-service )
	Version : 1.0-SNAPSHOT
--> Next 
--> Module name: ( nacos-micro-service )
	Content root : ( C:\java-test\idea2019\nacos_discovery\nacos-micro-service )
	Module file location: ( C:\java-test\idea2019\nacos_discovery\nacos-micro-service )
--> Finish

3、在父工程 nacos-micro-service 下,创建各个子工程(子模块)

1)创建 api-gateway 子工程(子模块)API 网关,端口:56010

--> 右键 nacos-micro-service 父工程
--> Modules 
--> Maven 
--> Groupld : ( djh.it )
	Artifactld : ( api-gateway )
	Version : 1.0-SNAPSHOT
--> Next 
--> Module name: ( api-gateway )
	Content root : ( C:\java-test\idea2019\nacos_discovery\nacos-micro-service\ api-gateway)
	Module file location: ( C:\java-test\idea2019\nacos_discovery\nacos-micro-service\api-gateway )
--> Finish

2)创建 application-1 子工程(子模块)应用1,端口:56020

--> 右键 nacos-micro-service 父工程
--> Modules 
--> Maven 
--> Groupld : ( djh.it )
	Artifactld : ( application-1 )
	Version : 1.0-SNAPSHOT
--> Next 
--> Module name: ( application-1 )
	Content root : ( C:\java-test\idea2019\nacos_discovery\nacos-micro-service\application-1 )
	Module file location: ( C:\java-test\idea2019\nacos_discovery\nacos-micro-service\application-1 )
--> Finish

3)创建 service-1 子工程(子模块)服务1父工程

--> 右键 nacos-micro-service 父工程
--> Modules 
--> Maven 
--> Groupld : ( djh.it )
	Artifactld : ( service-1 )
	Version : 1.0-SNAPSHOT
--> Next 
--> Module name: ( service-1 )
	Content root : ( C:\java-test\idea2019\nacos_discovery\nacos-micro-service\service-1 )
	Module file location: ( C:\java-test\idea2019\nacos_discovery\nacos-micro-service\service-1 )
--> Finish

4)创建 service-2 子工程(子模块)服务2父工程

--> 右键 nacos-micro-service 父工程
--> Modules 
--> Maven 
--> Groupld : ( djh.it )
	Artifactld : ( service-2 )
	Version : 1.0-SNAPSHOT
--> Next 
--> Module name: ( service-2 )
	Content root : ( C:\java-test\idea2019\nacos_discovery\nacos-micro-service\service-2 )
	Module file location: ( C:\java-test\idea2019\nacos_discovery\nacos-micro-service\service-2 )
--> Finish

4、在服务1父工程 service-1 子工程(子模块)再创建二级子工程(子模块)

1)创建 service-1-api 子工程(子模块) 服务1 API

--> 右键 service-1 父工程
--> Modules 
--> Maven 
--> Groupld : ( djh.it )
	Artifactld : ( service-1-api )
	Version : 1.0-SNAPSHOT
--> Next 
--> Module name: ( service-1-api )
	Content root : ( C:\java-test\idea2019\nacos_discovery\nacos-micro-service\service-1\service-1-api )
	Module file location: ( C:\java-test\idea2019\nacos_discovery\nacos-micro-service\service-1\service-1-api )
--> Finish

2)创建 service-1-server 子工程(子模块) 服务1 实现,端口:56030

--> 右键 service-1 父工程
--> Modules 
--> Maven 
--> Groupld : ( djh.it )
	Artifactld : ( service-1-server )
	Version : 1.0-SNAPSHOT
--> Next 
--> Module name: ( service-1-server )
	Content root : ( C:\java-test\idea2019\nacos_discovery\nacos-micro-service\service-1\service-1-server )
	Module file location: ( C:\java-test\idea2019\nacos_discovery\nacos-micro-service\service-1\service-1-server )
--> Finish

5、在服务2父工程 service-2 子工程(子模块)再创建二级子工程(子模块)

1)创建 service-2-api 子工程(子模块) 服务2 API

--> 右键 service-2 父工程
--> Modules 
--> Maven 
--> Groupld : ( djh.it )
	Artifactld : ( service-2-api )
	Version : 1.0-SNAPSHOT
--> Next 
--> Module name: ( service-2-api )
	Content root : ( C:\java-test\idea2019\nacos_discovery\nacos-micro-service\service-2\service-2-api )
	Module file location: ( C:\java-test\idea2019\nacos_discovery\nacos-micro-service\service-2\service-2-api )
--> Finish

2)创建 service-2-server 子工程(子模块) 服务2 实现,端口:56040

--> 右键 service-2 父工程
--> Modules 
--> Maven 
--> Groupld : ( djh.it )
	Artifactld : ( service-2-server )
	Version : 1.0-SNAPSHOT
--> Next 
--> Module name: ( service-2-server )
	Content root : ( C:\java-test\idea2019\nacos_discovery\nacos-micro-service\service-2\service-2-server )
	Module file location: ( C:\java-test\idea2019\nacos_discovery\nacos-micro-service\service-2\service-2-server )
--> Finish

  nacos-server-18.png


三、Nacos 服务发现-Spring Cloud Alibaba 综合架构实战-实现 application1 子模块。

1、在 application-1 子工程(子模块)应用1 中的 pom.xml 文件中,导入依赖项。

application1 属于 应用层,提供 http 接口服务。所以需要导入以下包。


<?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-micro-service</artifactId>
        <groupId>djh.it</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>application-1</artifactId>

    <dependencies>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</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-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

    </dependencies>

</project>

<!-- C:\java-test\idea2019\nacos_discovery\nacos-micro-service\application-1\pom.xml -->


**2、在 application-1 子工程(子模块)中,实现 application-1 功能,

创建 Controller 类 Application1Controller.java**


/**
 *   C:\java-test\idea2019\nacos_discovery\nacos-micro-service\application-1\src\main\java\djh\it\microservice\application1\controller\Application1Controller.java
 *
 *   2024-4-12 application-1 子工程(子模块)创建 Controller 类 Application1Controller.java
 *   application1 属于 应用层,提供 http 接口服务。
 */

package djh.it.microservice.application1.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Application1Controller {

    // 需要注入 service(基于 dubbo 协议)


    @GetMapping("/service")
    public String service(){
        return "test";
    }
}


**3、在 application-1 子工程(子模块)中,实现 application-1 配置功能,

创建 bootstrap.yml 配置文件,(纯粹的 dubbo 服务消费者,配置起来更简单)**


##C:\java-test\idea2019\nacos_discovery\nacos-micro-service\application-1\src\main\resources\bootstrap.yml

server:
  port: 56020  # 启动端口 命令行注入
  servlet:
    context-path: /application1

spring:
  application:
    name: application1  #spring应用名, # 注意 FeignClient 不支持名字带下划线
  main:
    allow-bean-definition-overriding: true # SpringBoot2.1 需要设定。
  cloud:
    nacos:
      config:  # 表示配置管理
        server-addr: 127.0.0.1:8848  # 配置中心地址
        file-extension: yaml  # 配置文件后缀名。
        namespace: b75c342f-8aeb-4f5a-a1d3-21f0738d7960  # dev开发环境(nacos-1.1.3)。
        group: NACOS_MICROSERVICE_GROUP  # xx业务组。
      discovery:  # 表示服务发现
        server-addr: 127.0.0.1:8848  # nacos服务器地址
        namespace: b75c342f-8aeb-4f5a-a1d3-21f0738d7960  # dev开发环境(nacos-1.1.3)
        cluster-name: DEFAULT





**4、浏览器地址栏输入:http://127.0.0.1:8848/nacos

登录 nacos 服务,在配置列表的,dev 开发环境,创建新配置**

Data ID : application1.yaml
Group : NACOS_MICROSERVICE_GROUP
配置格式 :YAML 
配置内容 :test

  nacos-server-19.png

5、在 application-1 子工程(子模块)中,创建启动类 Application1Bootstrap.java


/**
 *   C:\java-test\idea2019\nacos_discovery\nacos-micro-service\application-1\src\main\java\djh\it\microservice\application1\Application1Bootstrap.java
 *
 *   2024-4-12 在 application-1 子工程(子模块)中,创建启动类 Application1Bootstrap.java
 */

package djh.it.microservice.application1;

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

@SpringBootApplication
@EnableDiscoveryClient
public class Application1Bootstrap {
    public static void main(String[] args) {
        SpringApplication.run(Application1Bootstrap.class, args);
    }
}


6、浏览器地址栏输入:http://localhost:56020/application1/service

输出结果:test

  nacos-server-20.png

   nacos-server-21.png

上一节关联链接请点击
# Spring Cloud Alibaba Nacos_配置中心与服务发现(五)-- Nacos 服务发现 – 快速入门(3)

更多推荐