微服务
概念
是一种思想,基础是将单 个应用程序开发为一组小型独立服务,这些独立服务在自己的进程中运行,独立开发和部署。是分布式系统中的一种流行的架构模型,主要解决的是如何快速地开发的和部署我们的服务,对于能够适应快速开发和成长的公司是非常必要的。同时微服务设计中有很多很不错的想法和理念,通过学习微服务架构我们可以更快的成长。
Nacos
安装
https://nacos.io/zh-cn/docs/quick-start.html
windows版本下载下来后是一个压缩包,解压后得到如下目录
bin ..
conf ..
target ..
LICENSE
NOTICE
- 先检查
JAVA_HOME
变量有没有配置好,需要JDK8的环境
JAVA_HOME=D:\Program Files\Java\jdk1.8.0_261
- 再检查
Mysql
的数据库版本版本为5.7以上,也可以使用MariaDB
MySQL版本为10.5以上
使用cmd
连接上数据库,创建nacos_config
数据库,默认utf8mb4
编码的数据库
DROP DATABASE IF EXISTS `nacos_config`;
CREATE DATABASE `nacos_config` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
USE `nacos_config`;
然后使用下面的语句导入nacos
程序文件夹里面的conf/nacos-mysql.sql
source D:/nacos/conf/nacos-mysql.sql
- 打开
conf/application.properties
文件,打开以下配置
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql #本案例中使用的是mariadb,这里使用mysql就可以了
### Count of DB:
db.num=1 #这里的数量是一定要有的,否则会报错
### Connect URL of DB:
# 下面的配置根据自己的环境配置就可以了
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos
db.password.0=nacos
到这里,配置部分就完成了,打开nacos/bin/
文件夹,打开cmd
startup.cmd -m standalone
可以看到如下提示
"nacos is starting with standalone"
,--.
,--.'|
,--,: : | Nacos 2.0.3
,`--.'`| ' : ,---. Running in stand alone mode, All function modules
| : : | | ' ,'\ .--.--. Port: 8848
: | \ | : ,--.--. ,---. / / | / / ' Pid: 19204
| : ' '; | / \ / \. ; ,. :| : /`./ Console: http://192.168.116.1:8848/nacos/index.html
' ' ;. ;.--. .-. | / / '' | |: :| : ;_
| | | \ | \__\/: . .. ' / ' | .; : \ \ `. https://nacos.io
' : | ; .' ," .--.; |' ; :__| : | `----. \
| | '`--' / / ,. |' | '.'|\ \ / / /`--' /
' : | ; : .' \ : : `----' '--'. /
; |.' | , .-./\ \ / `--'---'
'---' `--`---' `----'
看到如下这句话就是运行成功了
2021-12-21 19:14:20,048 INFO Completed initialization in 28 ms
在浏览器打开
http://localhost:8848/nacos
用户名和密码都是nacos
,可以登陆成功,nacos
部分就可以先告一段落了。下面我们需要创建两个项目,分别注册到nacos
中,并使用nacos
的发现功能来实现在一个服务中调用另外一个服务的过程
在IDEA创建主项目
new Project -> Maven
编辑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>
<groupId>org.example</groupId>
<artifactId>nacosdemo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR9</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
- 在当前根目录上右键新建
module -> provider
项目,同样的方式新建consumer
的module
Feign
value
:指写远程调用的服务名称
contextId
:指定当前Bean
的Id
@FeignClient(value="sca-provider",contextId="remoteProviderService")
public interface RemoteProviderService(){
}