SpringCloud(三):SpringBoot集成Eureka的项目配置

SpringBoot集成Eureka

首先第一点,查看Eureka官方,看下springBoot与Eureeka版本问题。防止版本不兼容问题

SpringCloud(三):SpringBoot集成Eureka的项目配置_第1张图片

  • Finchley 兼容Spring Boot 2.0.x,不兼容Spring Boot 1.5.x
  • Dalston和Edgware 兼容Spring Boot 1.5.x,不兼容Spring Boot 2.0.x
  • Camden 兼容Spring Boot 1.4.x,也兼容Spring Boot 1.5.x
  • Brixton 兼容Spring Boot 1.3.x,也兼容Spring Boot 1.4.x
  • Angel 兼容Spring Boot 1.2.x

道人最开始选择的版本为SpringBoot 2.3.1版本,springCloud 选 Hoxton.SR5版本,但是该版本选择,在道人本地创建父项目进行版本管理时,子项目依赖导入失败,故最后降低版本,解决了该问题。问题的原因暂时没找到,欢迎道友指点!

具体代码参见道人的开源项目:https://github.com/bigskyfish/springCloudLearn

项目大致结构

SpringCloud(三):SpringBoot集成Eureka的项目配置_第2张图片

一:父项目

目的:使用标签进行版本管理,避免版本冲突。

父项目-cloudlearn
  • 父项目的打包形式必须是pom:pom
  • :标签进行模块管理
  • :标签进行版本管理,避免版本冲突


	4.0.0
	com.floatcloud
	cloudlearn
	0.0.1-SNAPSHOT
	cloudlearn
	pom
	Demo project for Spring Boot

	
		eureka-server8001
		order-server9001
		order-server9002
		consumer-client7001
	

	
		1.8
		2.1.5.RELEASE
		Greenwich.RELEASE
	

	
		
			
				org.springframework.boot
				spring-boot-dependencies
				${spring-boot.version}
				pom
				import
			
			
				org.springframework.cloud
				spring-cloud-dependencies
				${spring-cloud.version}
				pom
				import
			

		
	
	
		
			org.springframework.boot
			spring-boot-starter-test
			test
			
				
					org.junit.vintage
					junit-vintage-engine
				
			
		
	


二:Eureka服务注册

pom.xml
  • 打包形式为jar:jar
  • 中依赖不指定版本会直接应用父项目中的jar包版本
  • 导入的是spring-cloud-starter-netflix-eureka-server的jar包


	4.0.0
	
		com.floatcloud
		cloudlearn
		0.0.1-SNAPSHOT
	
	com.floatcloud
	eureka-server8001
	0.0.1-SNAPSHOT
	eureka-server8001
	jar

	
		1.8
	

	
		
			org.springframework.cloud
			spring-cloud-starter-netflix-eureka-server
		
		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	


	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	


pom.xml
server:
  port: 8001
eureka:
  instance:
    # 服务注册中心IP地址
    hostname: localhost
  client:
    # 是否向服务注册中心注册自己
    register-with-eureka: false
    # 是否检索服务
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
springboot入口(启动类)
  • 需加上@EnableEurekaServer注解
package com.floatcloud.eurekaserver8001;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServer8001Application {

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

}

三:服务提供者(Provider)

这里展示的order-server9001模块代码,order-server9002与order-server9001模块代码相同。

pom.xml
  • 打包形式为jar:jar
  • 中依赖不指定版本会直接应用父项目中的jar包版本
  • 导入的是spring-cloud-starter-netflix-eureka-client的jar包


    
        cloudlearn
        com.floatcloud
        0.0.1-SNAPSHOT
    
    4.0.0


    com.floatcloud
    order-server9001
    0.0.1-SNAPSHOT
    order-server9001
    jar

    
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    


    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


application.yml
  • 多个服务组成的集群的项目名称需要保持一致。
#启动端口
server:
  port: 9001
#项目名称
spring:
  application:
    name: order-provider
#eureka配置
eureka:
  instance:
    prefer-ip-address: true #使用服务的id地址注册
    hostname: localhost
  client:
    service-url:
      defaultZone: http://localhost:8001/eureka/
    fetch-registry: true
    register-with-eureka: true
springboot入口(启动类)
  • 需加上@EnableEurekaServer注解
package com.floatcloud.orderclient9001;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

/**
 * OrderClient9001Application
 *
 * @auther FloatCloud
 * @date 2020/6/23
 */
@SpringBootApplication
@EnableEurekaClient
public class OrderClient9001Application {

    public static void main(String[] args){
        SpringApplication.run(OrderClient9001Application.class, args);
    }
}
调用接口(Controller)
  • @RestController : 返回数据为对象而非页面,相当于@ResponseBody + @Controller
  • 这里标记了下端口号,负载均衡时,更加直观。
package com.floatcloud.orderclient9001.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * OrderController
 *
 * @auther FloatCloud
 * @date 2020/6/23
 */
@RestController
public class OrderController {

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

    @GetMapping("/order-server/create/order")
    public String createOrder(){
        return "端口:"+port+"产生订单";
    }
}

四:服务消费者(Consumer)

pom.xml


    
        cloudlearn
        com.floatcloud
        0.0.1-SNAPSHOT
    
    4.0.0


    com.floatcloud
    consumer-client7001
    0.0.1-SNAPSHOT
    consumer-client7001
    jar

    
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    
    

application.yml
#启动端口
server:
  port: 7001
#项目名称
spring:
  application:
    name: order-consumer
#eureka配置
eureka:
  instance:
    prefer-ip-address: true #使用服务的id地址注册
    hostname: localhost
  client:
    service-url:
      defaultZone: http://localhost:8001/eureka/
springboot入口(启动类)
  • 需加上@EnableEurekaServer注解
配置类
  • RestTemplate纳入javaBean管理
package com.floatcloud.consumerclient.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

/**
 * SysConfiguration
 * 远程调用采用的是RestTemplate方式调用
 * @LoadBalanced 该注解做负载均衡,详细会在道人博客中介绍
 * @auther FloatCloud
 * @date 2020/6/23
 */
@Configuration
public class SysConfiguration {

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return  new RestTemplate();
    }
}

远程调用(基于RestTemplate)
  • 调用的url为服务提供者在Eureka服务注册中心,注册的application值。
package com.floatcloud.consumerclient.controller;

import javax.annotation.Resource;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * ConsumerController
 *
 * @auther FloatCloud
 * @date 2020/6/23
 */
@RestController
public class ConsumerController {

    @Resource
    private RestTemplate restTemplate;

    /**
     * 服务提供的地址:即服务提供方的spring.application.name 转大写
     * 也可以理解为在Eureka服务注册中心,注册的application值。
     */
    final String urlPath = "http://ORDER-PROVIDER";

    @GetMapping("/consumer/make/order")
    public String makeOrder(@RequestParam("name") String name){
        String template = restTemplate.getForObject(urlPath + "/order-server/create/order", String.class);
        return name + template;
    }
}

SpringCloud(三):SpringBoot集成Eureka的项目配置_第3张图片

你可能感兴趣的:(面试,springCloud)