SpringBoot集成SpringCloud简要


SpringBoot集成SpringCloud

基于springboot2.6.3,仅介绍单机版,分布式开发略有不同

大致步骤:

  1. 新建module A,选择eureka作为注册中心,启动类上添加@EnableEurekaServer,添加pom依赖
  2. 服务提供者module B(注册到注册中心的业务处理者)启动类添加@EnableEurekaClient与相关依赖
  3. 消费者module C(发现服务并消费的服务)启动类添加@EnableFeignClients、@EnableDiscoveryClient与相关依赖
  4. 消费者通过FeignClient进程服务间的调用

详细步骤:

1、新建 module A 作为注册中心的服务

? 地址:localhost:8900

  • 选择Eureka Server(不选择也行,手动在pom中添加依赖)

  • 配置yml

    server:
        port: 8900
    eureka:
        instance:
            hostname: localhost
        client:
            #单机版不用把本身注册进去
            register-with-eureka: false
            fetch-registry: false
            service-url:
                defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
    
  • 添加依赖

    
            1.8
            2021.0.0
        
    
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-server
        
    
    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
        
    
    
  • 启动类添加注解

    @EnableEurekaServer
    @SpringBootApplication
    public class EurekaServerApplication {
        public static void main(String[] args) {
            SpringApplication.run(EurekaServerApplication.class, args);
        }
    }
    

2、处理服务提供者module B

? 地址:localhost:8086

  • yml配置

    server:
        port: 8086
    spring:
        datasource:
            #mysql
            driver-class-name: com.mysql.cj.jdbc.Driver
            url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2b8
            username: root
            password: root
        application:
        	#定义应用程序的名称,注册中心使用
            name: producer
    eureka:
        client:
            service-url:
            	#注册中心地址
                defaultZone: http://localhost:8900/eureka/
    
  • 添加pom

    
    	
    	
        	org.springframework.cloud
        	spring-cloud-starter-netflix-eureka-client
    	
    	
    
    
        
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                2021.0.0
                pom
                import
            
        
    
    
  • 启动类添加依赖

    @EnableEurekaClient
    @SpringBootApplication
    public class ProducerApplication {
        public static void main(String[] args) {
            SpringApplication.run(ProducerApplication.class, args);
        }
    }
    
  • controller示例

    @RestController
    public class ProductController {
        @RequestMapping(value = "select", method = RequestMethod.GET)
        public String select(@RequestParam Long id) {
            return "id===="+id;
        }
    }
    

3、消费者module C

? 服务地址:localhost:8088

  • 配置yml

    spring:
        application:
            name: consumer
    server:
        port: 8088
    
    eureka:
        client:
            service-url:
                defaultZone: http://localhost:8900/eureka/
    
  • 添加pom

    
        
    	
        	org.springframework.cloud
       		spring-cloud-starter-netflix-eureka-client
    	
        
    	
        	org.springframework.cloud
        	spring-cloud-starter-feign
        	1.4.7.RELEASE
    	
        
    
    
    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                2021.0.0
                pom
                import
            
        
    
    
  • 启动类:

    // 开启feign进行远程调用
    @EnableFeignClients
    // 开启发现其他服务
    @EnableDiscoveryClient
    @SpringBootApplication
    public class ConsumerApplication {
        public static void main(String[] args) {
            SpringApplication.run(ConsumerApplication.class, args);
        }
    }
    
  • controller示例:

    现在需要通过consumer去调用producer的select方法,在consumer中先定义一个controller接收请求

    @RestController
    public class ConsumerController {
        @Autowired
        ProducerService producerService;
    
        @RequestMapping(value = "selectProducerById", method = RequestMethod.GET)
        public String selectProducerById(@RequestParam Long id) {
            return producerService.select(id);
        }
    }
    
  • ProducerService接口

    上面producerService的定义

    /**
    	value="需要远程调用的应用的名称"
    	这里对应提供者module A的应用名称producer
    **/
    @FeignClient(value = "producer")
    public interface OrderService {
    	//对应于ProducerController中的select方法
        @RequestMapping(value = "select", method = RequestMethod.GET)
        String select(@RequestParam Long id);
    
    }
    

通过调用消费者module C 的ConsumerController的selectProducerById方法

来请求提供者module A 的ProducerController中的select方法:

localost:8088/selectProducerById?id=1

返回结果: id====1