Nacos 服务发现-Spring Cloud Alibaba 综合架构实战(一)实现 application1 子模块
一、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 服务发现-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 服务发现-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.ymlserver:port: 56020 # 启动端口 命令行注入servlet:context-path: /application1spring: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
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