IDEA搭建SpringCloud 项目

Spring Cloud 项目搭建

1、项目父类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>com.ityemu</groupId>
    <artifactId>FinancialManage</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
  
        <module>financial-eureka</module>
        <module>financial-product</module>
        <module>financial-consumer</module>
    </modules>

    <properties>
        <java.version>1.8</java.version>
        <spring-boot.version>2.4.1</spring-boot.version>
        <spring-web.version>5.3.2</spring-web.version>
        <jackson.version>2.11.3</jackson.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>${spring-boot.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring-boot.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring-web.version}</version>
        </dependency>

        <!--引用jackson包,json解析-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${jackson.version}</version>
        </dependency>

        <!--热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <!--lombok 注解-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

    </dependencies>


    <build>
        <plugins>
            <plugin>
                <!-- 指定maven编译的jdk版本,如果不指定,maven3默认用jdk 1.5 maven2默认用jdk1.3 -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <!-- 源代码使用的JDK版本 -->
                    <source>1.8</source>
                    <!-- 需要生成的目标class文件的编译版本 -->
                    <target>1.8</target>
                    <!-- 字符集编码 -->
                    <encoding>UTF-8</encoding>
                    <!-- 跳过测试 -->
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

一.创建SpringCloud-EUREKA 注册中心项目

1.删除 src

2.选择File 》》》new 》》Modual 》》 》spring Initializr 点击Next

在这里插入图片描述

3.输入模块名称

在这里插入图片描述

4.选择Spring Cloud Discovery 》》》选择 EUreka Server

在这里插入图片描述

5.编写application-eureka.yml 信息

server:
   port: 5000

eureka:
  instance:
       hostname: localhost
  client:
    service-url:
      defaultZone: http://localhost:5000/eureka/
    # 声明是否将自己的信息注册到 Eureka 服务器上
    register-with-eureka: false
     # 是否到 Eureka 服务器中抓取注册信息
    fetch-registry: false
  server:
    #设为false,关闭自我保护,即Eureka server在云心光器件会去统计心跳失败比例在15分钟之内是否低于85%,如果低于85%,EurekaServer
            #会将这些事例保护起来,让这些事例不会过期,但是在保护器内如果刚哈这个服务提供者非正常下线了,此时服务消费者会拿到一个无效的服务
            #实例,此时调用会失败,对于这个问题需要服务消费者端有一些容错机制,如重试、断路器等;
    enable-self-preservation: false
    #扫描失效服务的间隔时间(单位是毫秒,摩恩是60*1000),即60s
    eviction-interval-timer-in-ms: 2000
spring:
  application:
    name: eureka-server
  profile: eureka

6.编写 eureka 模块下的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 https://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.4.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ityemu</groupId>
    <artifactId>financial-eureka</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka</name>
    <description>springCloud 注册中心</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>2020.0.0-RC1</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</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>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>

        <resources>
            <resource>
                <!--指定resource插件处理哪个目录下的资源文件-->
                <directory>src/main/resources</directory>
                <!--打卡资源过滤功能-->
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>
</project>

7.编写application启动类

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }

}

在这里插入图片描述

8.启动eureka 模块

在这里插入图片描述

二.创建SpringCloud-Product生产者模块

1.选择File 》》》new 》》Modual 》》 》spring Initializr 点击Next

在这里插入图片描述

2.输入模块名称

在这里插入图片描述

3.选择Spring Cloud Discovery 》》》选择 Eureka Discovery Client

在这里插入图片描述

4.编写application-product.yml 信息

spring:
  profile: product
  application:
    name: product-server
  cloud:
    config:
      discovery:
        enabled: true
        serviceId: eureka-server
server:
  port: 7002
  #servlet:
  #  context-path: /product
eureka:
  client:
    service-url:
    #defaultZone 这个是不会提示的,此处需要自己写
    #实际上属性应该是service-url,这个属性是个map(key-value)格式;当key是defaultZone的时候才能被解析;所以这里没有提示,
    #但是自己还需要写一个defaultZone;
      defaultZone: http://localhost:5000/eureka/

    #表示是否将自己注册进EurekaServer默认为true
    register-with-eureka: true
    #是否从EurekaServer抓取已有的注册消息,默认为true,单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    fetch-registry: true
  instance:
    prefer-ip-address: true

5.编写 product 模块下的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
    <artifactId>FinancialManage</artifactId>
    <groupId>com.ityemu</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

<groupId>com.ityemu</groupId>
<artifactId>financial-product</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>financial-product</name>
<description>springCloud生产者</description>

<properties>
    <spring-cloud.version>2020.0.0-RC1</spring-cloud.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        <exclusions>
            <exclusion>
                <groupId>com.google.code.gson</groupId>
                <artifactId>gson</artifactId>
            </exclusion>
        </exclusions>
    </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>
    </dependencies>
</dependencyManagement>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

<repositories>
    <repository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <url>https://repo.spring.io/milestone</url>
    </repository>
</repositories>

6.编写application 启动类

@SpringBootApplication
//@EnableEurekaClient 和 @EnableDiscoveryClient 都是让eureka发现该服务并注册到eureka上的注解
//相同点:都能让注册中心Eureka发现,并将该服务注册到注册中心上;
//不同点:@EnableEurekaClient只适用于Eureka作为注册中心,而@EnableDiscoveryClient可以是其他注册中心;
@EnableEurekaClient
@EnableDiscoveryClient
public class FinancialProductApplication {

    public static void main(String[] args) {
        SpringApplication.run(FinancialProductApplication.class, args);
    }

}

7.编写提供服务端口信息

@RestController
@RequestMapping("product")
public class ProductController {

    @Value("${server.port}")
    String port;

    @RequestMapping("/hi")
    public String home(@RequestParam(value = "name", defaultValue = "forezp") String name) {
        return "hi " + name + " ,i am from port:" + port;
    }

    @RequestMapping("/time")
    public String getTime(){
        return  new Date().toString();
    }
}

8.启动product 模块

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三.创建SpringCloud-Product生产者模块

前3步同创建生产者模块一样

4.编写application-consumer.yml 信息

server:
  #servlet:
  #  定义项目的访问访问路径
  #  context-path: /consumer
    #定义端口号
  port: 7001
spring:
  profile: consumer
  application:
  #定义应用名称,即服务名称
    name: consumer-server
eureka:
  client:
    service-url:
      defaultZone: http://localhost:5000/eureka/

#设置feign客户端超时时间(OpenFeign默认支持ribbon)
ribbon:
  #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的实际
  ReadTimeout: 5000
  #指的是建立连接后从服务器读取到可用资源所用的时间
  ConnectTimeout: 5000

5.编写 consumer 模块下的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>FinancialManage</artifactId>
        <groupId>com.ityemu</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <groupId>com.ityemu</groupId>
    <artifactId>financial-consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>financial-consumer</name>
    <description>springCloud 消费者</description>

    <properties>
        <spring-cloud.version>2020.0.0-RC1</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>com.google.code.gson</groupId>
                    <artifactId>gson</artifactId>
                </exclusion>
            </exclusions>

        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</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>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>
</project>

6.编写application 启动类

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@EnableFeignClients
public class FinancialConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(FinancialConsumerApplication.class, args);
    }

    @LoadBalanced //使用负载均衡机制
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

}

7.编写提供消费端口信息

@RestController
@RequestMapping("/consumer")
public class ConsumerController {

    @Autowired
    private  RestTemplate restTemplate;

    @Autowired
    private  ConsumerService consumerService;

    @GetMapping("/show")
    public String showMessage(@RequestParam String name){
        String result = restTemplate.getForObject("http://product-server/hi?name=" + name, String.class);
        System.out.println(result);
        return result;
    }


    @GetMapping("/get")
    public String getMessage(@RequestParam String name){
        String result = consumerService.getResultByName(name);
        System.out.println(result);
        return result;
    }


    @GetMapping(value = "/time")
    public String paymentFeignTimeout() {
        return consumerService.getTime();

    }
}

8.消费端口接口类编写

@Service
@FeignClient("PRODUCT-SERVER")   // 指定当前Service所绑定的微服务名称在
@RequestMapping("product")//指定当前Restful 链接
public interface ConsumerService {

    @GetMapping("/hi")
    public String getResultByName(@PathVariable("name") String name);

    @GetMapping("/time")
    public String getTime();
}

9.启动consumer模块
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u013478983/article/details/112321686