使用SpringBoot创建微服务项目

1.创建Eureka 服务端注册中心

  • 使用SpringBoot创建向导,创建新的子模块项目:并勾选Spring Cloud DisDiscovery下的Eureka Server选项
  • 使用父项目管理Eureka Server的依赖,在父项目添加以下pom文件
<!--统一管理版本-->
<spring-cloud.version>Hoxton.SR9</spring-cloud.version>
 <!--SpringCloud家族依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
  • 子项目pom文件为
 <dependencies>
        <!-- SpringBoot WEB,启动项目时会启动Tomcat -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency> <!-- Eureka Server,是Spring Cloud家族中的 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
  • 配置注册服务中心
# 当前项目运行在服务器的哪个端口,Eureka Server推荐使用8761
server.port=8761
# Eureka Server不要注册自已
eureka.client.register-with-eureka=false
# Eureka Server不要从别处抓取注册表
eureka.client.fetch-registry=false

  • 并在启动类添加@EnableEurekaServer注解

2.常见错误

  • 如果仅启动了Eureka Server,却长时间没有任何服务来注册,则过一段时间后,在
    Eureka Server的注册页会提示警告信息如下:

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

可以无视以上警告,后续,当有服务注册后的一段时间内,该警告会自动消失!
注意:从现在开始往后的开发过程中,当需要启动项目时,必须先启动Eureka Server,再启动其它服务!如果没有启动Eureka Server就直接启动任何Eureka Client,会出现以下错误:

Connection refused:connect

提示:即使出现以上错误,也不影响以上项目单体运行,并且,补充启动Eureka Server即可,所有的Eureka Client都会每间隔30秒自动注册一次。

3.创建通用项目

需要将项目共同类放到一个通用项目中,其它各项目均依赖于这个项目,就可以使用到相同的数据类型!

  • 父项目管理commons项目
 <straw-commons.version>0.0.1-SNAPSHOT</straw-commons.version>
  <!--通用项目-->
            <dependency>
                <groupId></groupId>
                <artifactId></artifactId>
                <version>${straw-commons.version}</version>
            </dependency>
  • 子项目引入pom文件即可

4.创建客户端项目

pom文件中引入,Spring Cloud家族的Eureka Client

 <!-- Eureka Client,是Spring Cloud家族中的 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

配置application.properties文件

# 当前项目运行在服务器的哪个端口
server.port=8081 

# 配置连接MySQL中的straw数据库
spring.datasource.url=jdbc:mysql://localhost:3306/straw?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai 
spring.datasource.username=root 
spring.datasource.password=root 
# 配置Druid数据库连接池
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource 
spring.datasource.druid.initial-size=2 
spring.datasource.druid.max-active=5 

# 设置日志的显示级别为trace,将显示所有级别的日志
logging.level.cn.tedu.straw=trace 

# 设置响应结果的JSON数据不包含为null的属性
spring.jackson.default-property-inclusion=non_null

# 应用程序名称
spring.application.name=api-user

# 当前Eureka Client的实例(instance)在Eureka Server中注册的名称
eureka.instance.appname=${spring.application.name}
# 当前Eureka Client的实例是否使用IP地址来注册
# 当取值为true时,在Eureka Server中的将是当前Eureka Client的IP地址
# 当取值为false时,在Eureka Server中的将是当前Eureka Client的主机名
eureka.instance.prefer-ip-address=true
# 当前Eureka Client的实例在Eureka Server中注册的主机名
# 提示:需要eureka.instance.prefer-ip-address设置为false时有效
eureka.instance.hostname=localhost
# 当前Eureka Client的实例在Eureka Server中注册的IP地址
# 提示:需要eureka.instance.prefer-ip-address设置为true时有效
eureka.instance.ip-address=127.0.0.1
# 当前Eureka Client的实例在Eureka Server状态页显示的名称
eureka.instance.instance-id=${eureka.instance.appname}@${eureka.instance.ip-address}:${server.port}

5.创建网关项目

  • 使用SpringBoot创建向导,创建新的子模块项目:并勾选Spring Cloud Routing下的Zuul选项
    -使用网关时,可以通过Zuul来实现,依然先调整 straw-gateway 的 pom.xml 文件,将 straw 设置为父项目,并添加必要的依赖:
 <!-- SpringBoot WEB,启动项目时会启动Tomcat -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Eureka Client,是Spring Cloud家族中的 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!-- Zuul网关,是Spring Cloud家族中的 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>
        <!-- SpringBoot单元测试 -->
        <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>

配置application.properties文件

# 当前项目运行在服务器的哪个端口
server.port=80

# 应用程序名称
spring.application.name=gateway
# 当前Eureka Client的实例(instance)在Eureka Server中注册的名称
eureka.instance.appname=${spring.application.name}
# 当前Eureka Client的实例是否使用IP地址来注册
# 当取值为true时,在Eureka Server中的将是当前Eureka Client的IP地址
# 当取值为false时,在Eureka Server中的将是当前Eureka Client的主机名
eureka.instance.prefer-ip-address=true
# 当前Eureka Client的实例在Eureka Server中注册的主机名
# 提示:需要eureka.instance.prefer-ip-address设置为false时有效
eureka.instance.hostname=localhost
# 当前Eureka Client的实例在Eureka Server中注册的IP地址
# 提示:需要eureka.instance.prefer-ip-address设置为true时有效
eureka.instance.ip-address=127.0.0.1
# 当前Eureka Client的实例在Eureka Server状态页显示的名称
eureka.instance.instance-id=${eureka.instance.appname}@${eureka.instance.ip-address}:${server.port}

# 转发规则:straw-api-user
zuul.routes.api-user.service-id=api-user
zuul.routes.api-user.path=/api-user/**

  • 网关转发
    使用SpringBoot创建微服务项目_第1张图片
    以上配置的作用是:将所有以 /api-user/ (紫色部分)为前缀的请求,全部转发给 api- user (蓝色部分)的微服务项目去处理!
  • 在 StrawGatewayApplication 类的声明之前添加 @EnableZuulProxy 注解:

你可能感兴趣的:(笔记,学习资料,java,spring,spring,boot)