这是我学习《微服务从小白到专家》的学习笔记。官方代码地址:https://github.com/banxian-yao/broadview-coupon-center
第三章
第三章直接使用官方代码,所有的依赖服务:mysql, redis, kafka, rabbitmq,自己都使用Docker进行安装,使用docker-compose进行管理,docker-compose.yml内容如下:
version: "3.9"
services:
mysql80:
container_name: mysql80
image: mysql
ports:
- "3306:3306"
volumes:
- "./data/mysql:/var/lib/mysql"
environment:
- MYSQL_ROOT_PASSWORD=password
zookeeper:
container_name: zookeeper
image: zookeeper
ports:
- "2181:2181"
kafka:
container_name: kafka
image: wurstmeister/kafka
ports:
- "9092:9092"
environment:
- KAFKA_ADVERTISED_HOST_NAME=192.168.0.106
- KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
rabbitmq:
container_name: rabbitmq
image: rabbitmq:management
ports:
- "5672:5672"
- "15672:15672"
environment:
- RABBITMQ_DEFAULT_USER=guest
- RABBITMQ_DEFAULT_PASS=guest
redis:
container_name: redis
image: redis
ports:
- "6379:6379"
写docker-compose.yml配置的时候需要注意的几点:
- 升级spring boot到2.5.6版本
- 里面有
commons-collections4和commons-lang3依赖的地方的版本特别注意,在最顶层的pom.xml里面重复写了两个,需要删掉一个。每个module下面也写了版本号,需要把版本号去掉 - KAFKA_ADVERTISED_HOST_NAME 改成自己物理机的IP地址
- RABBITMQ_DEFAULT_USER 和 RABBITMQ_DEFAULT_PASS 都是guest,而且rabbitmq启动之后必须在admin ui里面手动创建
broadview.queue这个queue
第五章 Eureka
对spring-cloud-dependencies的依赖升级到2020.0.4
<spring.cloud-version>2020.0.4</spring.cloud-version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
需要额外引用gson的依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.8</version>
</dependency>
EurekaApplication上面的注解是EnableEurekaServer,书中写的是EnableDiscoveryClient是错误的。
浏览器访问的时候是不需要/eureka这个endpoint。
第六章 Nacos
各依赖版本分别如下:
Spring Boot: 2.5.6 Spring Cloud: 2020.0.4 Nacos Config: 2021.1
特别注意的一点是需要添加如下的依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
配置管理
需要先启动nacos server,可以使用docker的方式快速启动一个standalone的容器。git clone https://github.com/nacos-group/nacos-docker之后进行nacos-docker目录,使用docker-compose -f example/standalone-derby.yaml up -d启动nacos server。
启动之后访问http://localhost:8848/nacos使用用户密码均为nacos的账号进行登录,创建一个spring.application.name的dataID,特别需要注意的是要把后缀名给加上,比如nacos-demo.properties。
完整的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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.6</version>
</parent>
<groupId>org.example</groupId>
<artifactId>NacosDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<spring-cloud.version>2020.0.4</spring-cloud.version>
<nacos.version>2021.1</nacos.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${nacos.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
服务注册与服务发现
2021.1版本的alibaba nacos已经不包含Ribbon负载均衡了,可以使用spring cloud loadbalancer,包含如下的依赖到consumer的pom.xml即可:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>