SpringCould之服务消费者(Ribbon)

SpringCloud 提供的服务消费者有两种(此处使用Ribbon实现)

  • Ribbon +RestTemplate
  • fegin




    和SpringCloud其他服务一样 
    创建一个消费者工程项目(在父工程spring-cloud下创建一个 spring-cloud-ribbon 工程项目)

    pom.xml
    
    
        4.0.0
    
        
            com.funtl
            hello-spring-cloud-dependencies
            1.0.0-SNAPSHOT
            ../hello-spring-cloud-dependencies/pom.xml
        
    
        hello-spring-cloud-web-admin-ribbon
        jar
    
        hello-spring-cloud-web-admin-ribbon
        http://www.funtl.com
        2018-Now
    
        
            
            
                org.springframework.boot
                spring-boot-starter-web
            
            
                org.springframework.boot
                spring-boot-starter-tomcat
            
            
                org.springframework.boot
                spring-boot-starter-thymeleaf
            
            
                org.springframework.boot
                spring-boot-starter-actuator
            
            
                org.springframework.boot
                spring-boot-starter-test
                test
            
            
    
            
            
                org.springframework.cloud
                spring-cloud-starter-netflix-eureka-server
            
            
                org.springframework.cloud
                spring-cloud-starter-netflix-ribbon
            
            
    
            
            
                net.sourceforge.nekohtml
                nekohtml
            
        
    
        
            
                
                    org.springframework.boot
                    spring-boot-maven-plugin
                    
                        com.einblatt.hello.spring.cloud.web.admin.ribbon.WebAdminRibbonApplication
                    
                
            
        
    

    通过 @EnbleDisconverClient 注解注册到服务中心
    package com.funtl.hello.spring.cloud.web.admin.ribbon;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    public class WebAdminRibbonApplication {
        public static void main(String[] args) {
            SpringApplication.run(WebAdminRibbonApplication.class, args);
        }
    }

    配置程序端口号等
    application.yml
    spring:
      application:
        name: hello-spring-cloud-web-admin-ribbon
      thymeleaf:
        cache: false
        mode: LEGACYHTML5
        encoding: UTF-8
        servlet:
          content-type: text/html
    
    server:
      port: 8764
    
    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:8761/eureka/   #Eureka服务注册中心地址
     配置RestTemplata 的Bean使用 并且通过@LoadBalanced 注解开启负载均衡功能
     
    package com.funtl.hello.spring.cloud.web.admin.ribbon.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;
    
    @Configuration
    public class RestTemplateConfiguration {
    
        @Bean
        @LoadBalanced
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    }

     创建测试用的Service

    在这里我们直接用的程序名替代了具体的 URL 地址,在 Ribbon 中它会根据服务名来选择具体的服务实例,根据服务实例在请求的时候会用具体的 URL 替换掉服务名
    package com.funtl.hello.spring.cloud.web.admin.ribbon.service;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.web.client.RestTemplate;
    
    @Service
    public class AdminService {
    
        @Autowired
        private RestTemplate restTemplate;
    
        public String sayHi(String message) {
            return restTemplate.getForObject("http://HELLO-SPRING-CLOUD-SERVICE-ADMIN/hi?message=" + message, String.class);
        }
    }
    创建测试用的Controller
    package com.funtl.hello.spring.cloud.web.admin.ribbon.controller;
    
    import com.funtl.hello.spring.cloud.web.admin.ribbon.service.AdminService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class AdminController {
    
        @Autowired
        private AdminService adminService;
    
        @RequestMapping(value = "hi", method = RequestMethod.GET)
        public String sayHi(@RequestParam String message) {
            return adminService.sayHi(message);
        }
    }
     将Eureka服务端开启 

     访问 http://localhost:8764/hi?message=HelloRibbon

     浏览器交替显示(实现负载均衡)
    Hi,your message is :"HelloRibbon" i am from port:8762
    Hi,your message is :"HelloRibbon" i am from port:8763

你可能感兴趣的:(SpringCould之服务消费者(Ribbon))