2.SpringCloud -- 服务注册中心 EurekaZookeeperConsulNacos
Posted 爱是与世界平行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.SpringCloud -- 服务注册中心 EurekaZookeeperConsulNacos相关的知识,希望对你有一定的参考价值。
2.SpringCloud -- 服务注册中心 Eureka、Zookeeper、Consul、Nacos
- 一、从零开始 搭建、优化 微服务
- 二、引入服务注册 与 发现
- 三、服务注册与发现 -- Eureka
- 四、服务注册与发现 -- Zookeeper
- 五、服务注册与发现 -- Consul
一、从零开始 搭建、优化 微服务
1.1 项目说明
【基本说明:】
上一篇介绍了 架构演变 以及 代码拆分,详见:https://www.cnblogs.com/l-y-h/p/14105682.html
从这篇开始,将从零开始搭建微服务,逐步对 代码进行 优化,并选择相关技术解决 微服务相关问题。
【基本环境:】
开发工具:IDEA
编码环境:Java8 + mysql 8
框架:SpringBoot 2.3.5 + SpringCloud Hoxton.SR9 + MyBatisPlus 3.3.1
注:
微服务相关技术此处不一一列举出来了,有些技术仅会简单使用、原理部分并没有全弄懂(持续学习中,有不对的地方还望不吝赐教)。
MyBatisPlus 基本使用可参考:https://www.cnblogs.com/l-y-h/p/12859477.html
搭建 SpringBoot 项目可参考:https://www.cnblogs.com/l-y-h/p/13083375.html
1.2 基本项目创建
(1)项目简介
【项目简介:】
上一篇介绍了 垂直拆分 代码,详见:https://www.cnblogs.com/l-y-h/p/14105682.html#_label1_2
此处以此为基础,逐步优化、并使用相关微服务技术去搭建。
【项目基本模块:(从最简单开始,后续模块视情况添加)】
项目分为两个模块:生产者模块(producer)、消费者模块(consumer)。
生产者模块 用于 提供 各种服务。
消费者模块 用于 访问 各种服务。
注:
生产者提供各种服务,其需要与数据库进行交互(controller、service、mapper 都需要)。
消费者访问服务,只需要编写 controller 即可,消费者 去 远程访问 生产者服务。
可以使用 RestTemplate 进行远程服务调用。
【项目命名约定:】
为了便于区分各服务模块,各个模块服务名 命名规则为: 模块名 + _ + 端口号。
比如:生产者模块为 producer_8000、消费者模块为 consumer_9000
(2)采用 maven 聚合 SpringBoot 子模块的方式创建项目
基本操作详见上一篇:https://www.cnblogs.com/l-y-h/p/14105682.html#_label1_2
Step1:创建 maven 聚合工程(SpringCloudDemo)。
Step2:创建 SpringBoot 子模块(producer_8000)。
修改子模块配置文件(端口号为 8000、服务名为 producer)。
修改子模块 pom.xml 中 标签,指向父工程。
修改父工程 pom.xml 中 标签,指向子模块。.
Step3:引入 producer_8000 所需依赖。
引入 MyBatisPlus 以及 MySQL 等依赖,在 父工程 进行版本控制。
【建一个表(producer_user),SQL 如下:】
DROP DATABASE IF EXISTS producer;
CREATE DATABASE producer;
USE producer;
CREATE TABLE producer_user(
id BIGINT(20) AUTO_INCREMENT COMMENT 'ID',
name VARCHAR(100) COMMENT 'Name',
PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT 'user';
【在父工程(SpringCloudDemo)中进行版本控制:】
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lyh.springcloud</groupId>
<artifactId>SpringCloudDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>producer_8000</module>
<module>consumer_9000</module>
</modules>
<name>SpringCloudDemo</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<mybatisplus.version>3.3.1.tmp</mybatisplus.version>
<mysql.connector.version>8.0.18</mysql.connector.version>
<httpcore.version>4.4.13</httpcore.version>
<lombok.version>1.18.12</lombok.version>
<java.version>1.8</java.version>
</properties>
<!-- springboot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.5.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatisplus.version}</version>
</dependency>
<!-- mybatis-plus 代码生成器相关依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatisplus.version}</version>
</dependency>
<!-- 添加 mybatis-plus 模板引擎 依赖 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
<!-- mysql-connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.connector.version}</version>
</dependency>
<!-- 状态码参考地址:http://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/HttpStatus.html -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>${httpcore.version}</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
【在子工程(producer_8000)中进行依赖引入:】
<?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>com.lyh.springcloud</groupId>
<artifactId>SpringCloudDemo</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>producer</artifactId>
<name>producer</name>
<dependencies>
<!-- spring web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<!-- mysql-connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 状态码参考地址:http://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/HttpStatus.html -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<!-- test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- mybatis-plus 代码生成器相关依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
</dependency>
<!-- 添加 mybatis-plus 模板引擎 依赖 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
</dependency>
</dependencies>
</project>
Step4:编写 producer_8000 所需基本代码。
配置 MySQL 数据源。
【配置 MySQL 数据源:】
server:
port: 8000
spring:
application:
name: producer
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
url: jdbc:mysql://120.26.184.41:3306/producer?useUnicode=true&characterEncoding=utf8
编写相关 bean、mapper、service、controller 等代码。
此处通过 mybatis-plus 代码生成器生成相关代码,也可以手动创建。
代码生成器相关操作详见:https://www.cnblogs.com/l-y-h/p/12859477.html#_label1_2
【TestAutoGenerate:】
package com.lyh.springcloud.generateCode;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.jupiter.api.Test;
public class TestAutoGenerate {
@Test
public void autoGenerate() {
// Step1:代码生成器
AutoGenerator mpg = new AutoGenerator();
// Step2:全局配置
GlobalConfig gc = new GlobalConfig();
// 填写代码生成的目录(需要修改)
String projectPath = "E:\\\\myProject\\\\SpringCloudDemo\\\\producer_8000";
// 拼接出代码最终输出的目录
gc.setOutputDir(projectPath + "/src/main/java");
// 配置开发者信息(可选)(需要修改)
gc.setAuthor("lyh");
// 配置是否打开目录,false 为不打开(可选)
gc.setOpen(false);
// 实体属性 Swagger2 注解,添加 Swagger 依赖,开启 Swagger2 模式(可选)
//gc.setSwagger2(true);
// 重新生成文件时是否覆盖,false 表示不覆盖(可选)
gc.setFileOverride(false);
// 配置主键生成策略,此处为 ASSIGN_ID(可选)
gc.setIdType(IdType.ASSIGN_ID);
// 配置日期类型,此处为 ONLY_DATE(可选)
gc.setDateType(DateType.ONLY_DATE);
// 默认生成的 service 会有 I 前缀
gc.setServiceName("%sService");
mpg.setGlobalConfig(gc);
// Step3:数据源配置(需要修改)
DataSourceConfig dsc = new DataSourceConfig();
// 配置数据库 url 地址
dsc.setUrl("jdbc:mysql://120.26.184.41:3306/producer?useUnicode=true&characterEncoding=utf8");
// dsc.setSchemaName("testMyBatisPlus"); // 可以直接在 url 中指定数据库名
// 配置数据库驱动
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
// 配置数据库连接用户名
dsc.setUsername("root");
// 配置数据库连接密码
dsc.setPassword("123456");
mpg.setDataSource(dsc);
// Step:4:包配置
PackageConfig pc = new PackageConfig();
// 配置父包名(需要修改)
pc.setParent("com.lyh.springcloud");
// 配置模块名(需要修改)
pc.setModuleName("producer");
// 配置 entity 包名
pc.setEntity("entity");
// 配置 mapper 包名
pc.setMapper("mapper");
// 配置 service 包名
pc.setService("service");
// 配置 controller 包名
pc.setController("controller");
mpg.setPackageInfo(pc);
// Step5:策略配置(数据库表配置)
StrategyConfig strategy = new StrategyConfig();
// 指定表名(可以同时操作多个表,使用 , 隔开)(需要修改)
strategy.setInclude("producer_user");
// 配置数据表与实体类名之间映射的策略
strategy.setNaming(NamingStrategy.underline_to_camel);
// 配置数据表的字段与实体类的属性名之间映射的策略
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
// 配置 lombok 模式
strategy.setEntityLombokModel(true);
// 配置 rest 风格的控制器(@RestController)
strategy.setRestControllerStyle(true);
// 配置驼峰转连字符
strategy.setControllerMappingHyphenStyle(true);
// 配置表前缀,生成实体时去除表前缀
// 此处的表名为 test_mybatis_plus_user,模块名为 test_mybatis_plus,去除前缀后剩下为 user。
strategy.setTablePrefix(pc.getModuleName() 以上是关于2.SpringCloud -- 服务注册中心 EurekaZookeeperConsulNacos的主要内容,如果未能解决你的问题,请参考以下文章
5.springcloud微服务架构搭建 之 《springboot集成Hystrix》