搭建Eureka为注册中心的SpringCloud项目
今天就亲手搭建一个项目,使用Eureka为注册中心,因为是微服务项目,所以必须要有一个注册中心,实现服务治理功能,后续就使用nacos为配置中心对服务进行管理了,这里使用idea未开发工具,maven3.6.2,数据库MySQL。
一、新建一个父项目,便于管理
1. 搭建步骤如下图所示:
2. 快捷键:CTRL+ALT+S,选择自己安装的maven版本及自己配置的仓库地址
3. 选择自己安装的jdk1.8版本
4. 将src目录删除,留下pom.xml文件
5. 父项目的pom文件,一般放子目录共同使用的maven依赖
<?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>yooo.yun.com</groupId>
<artifactId>cloud-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<name>cloud-demo</name>
<packaging>pom</packaging>
<!--Spring Boot配置 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.8.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--web支持 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--测试启动组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
<scope>provided</scope>
</dependency>
</dependencies>
<!-- Spring Boot-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<resources>
<!-- 先指定 src/main/resources下所有文件及文件夹为资源文件 -->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.14</version>
<configuration>
<imageName>${project.name}</imageName>
<dockerDirectory>${project.name}/src/main/docker</dockerDirectory>
<dockerHost>${docker.host}</dockerHost>
<skipDockerBuild>true</skipDockerBuild>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
</project>
二、新建一个用户User模块
- 步骤与创建父项目相同。
- 创建一个UserController控制类和UserApplication启动类。
UserController控制类 :
package yooo.yun.com.user;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author WangJiao
* @since 2020/10/14
*/
@RequestMapping(value = "/saas/user")
@RestController("userC")
public class UserController {
@GetMapping("/{id}")
public String detail(@PathVariable("id") long id) throws JSONException {
JSONObject jsonObject = new JSONObject();
jsonObject.put("id", id);
jsonObject.put("msg", "user 模块");
return jsonObject.toString();
}
}
UserApplication 启动类。
package yooo.yun.com;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
/**
* @author WangJiao
* @since 2020/10/14
*/
@EnableEurekaClient
@SpringBootApplication
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class, args);
}
}
- user服务的pom文件:
<?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>cloud-demo</artifactId>
<groupId>yooo.yun.com</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-user</artifactId>
<!-- eureka-client-->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!--该插件主要用途:构建可执行的JAR -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.14</version>
<configuration>
<imageName>${project.artifactId}</imageName>
<dockerDirectory>${basedir}</dockerDirectory>
<dockerHost>${docker.host}</dockerHost>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
</project>
- user服务的application.yml文件
server:
port: 5050
servlet:
context-path: /user
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8080/eureka
instance:
prefer-ip-address: true
instance-id: ${spring.cloud.client.ip-address}:${server.port}
spring:
application:
name: cloud-user
freemarker:
enabled: false
thymeleaf:
cache: false
datasource:
url: jdbc:mysql://localhost:3306/tb_user?characterEncoding=utf8&generateSimpleParameterMetadata=true&connectTimeout=5000&useSSL=false
username: admin
password: admin123!
三、新建注册中心Eureka模块
- 步骤与新建User模块步骤相同,目录结构如下。
- 新建一个EurekaApplication 启动类。
package yooo.yun.com;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* @author WangJiao
* @since 2020/10/14
*/
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
- Eureka模块的pom文件。
<?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>cloud-demo</artifactId>
<groupId>yooo.yun.com</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-eureka</artifactId>
<!-- eureka-server-->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
</project>
- Eureka模块的pom文件
server:
port: 8080
# 设置注册中心地址
eureka:
instance:
hostname: localhost
prefer-ip-address: true
instance-id: ${spring.cloud.client.ip-address}:${server.port}
client:
register-with-eureka: false # 该应用为注册中心,设置为false,代表不向注册中心注册自己
fetch-registry: false # 由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以设置为false
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
spring:
application:
name: eureka
四、启动注册中心与User模块
- 必须先启动eureka模块注册中心,再启动其他模块,这样其他服务模块才能注册到注册中心上去。
- 访问http://localhost:8080/ Eureka,启动成功。
- 启动user模块。
- 在浏览器或者postman中访问 http://localhost:5050/user/saas/user/123
五、新建一个Order模块
- 步骤与上诉模块一样,就不重复写了。
- 启动order服务。
六、User、Order服务注册到注册中心上
- 刷新 http://localhost:8080/ 。
可以看到user,order服务成功注册到注册中心上了。
到这一步,说明你已经Get到了“使用Eureka为注册中心搭建Spring Cloud微服务”。
七、总结
- 除了使用Eureka为注册中心外,还可以使用Consul、Zookeeper、Etcd等。
- 搭建Spring Cloud 项目必须使用jdk1.8以上。建议使用jdk1.8,因为Spring Cloud是基于Spring Boot 2.0基础上的,SpringBoot2.0是基于jdk1.8的。
- 微服务是一种架构风格,既将单体应用划分为小型的服务单元,服务之间使用HTTP的API进行资源访问与操作。
-:到了这里,你已经get到了喔!