美文网首页
7.服务治理-Eureka-创建服务消费者

7.服务治理-Eureka-创建服务消费者

作者: 溅十三 | 来源:发表于2020-04-21 22:25 被阅读0次
    image.png

    知识点:

    1.String.format("http://%s:%s/sayHi",instance.getHost(),instance.getPort());
    2.log.info("url is {}",target);
    3.@Bean注解,spring会在初始化的时候会把这个方法加入到上下文,然后我们就可以在Controller里得到这个方法了

    1. 启动类
    package com.imooc.springcloud;
    
    import org.springframework.boot.WebApplicationType;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.context.annotation.Bean;
    import org.springframework.web.client.RestTemplate;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    public class EurekaConsumerApplication {
        /*
        * @Bean注解,spring会在初始化的时候会把这个方法加入到上下文,然后我们就可以在Controller里得到这个方法了
        * */
        @Bean
        public RestTemplate register(){
            return new RestTemplate();
        }
    
        public static void main(String[] args) {
            new SpringApplicationBuilder(EurekaConsumerApplication.class)
                    .web(WebApplicationType.SERVLET)
                    .run(args);
        }
    }
    
    
    2. Controller服务调用流程

    业务流程:

    1.拿到服务提供者的实例
    2.借助RestTemplate发起真实的服务调用
    3.单独声明RestTemplate
    4.启动顺序:启动注册中心->服务提供者->服务消费者
    5.调用消费者接口(服务消费者会调用服务提供者)

    package com.imooc.springcloud;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.cloud.client.ServiceInstance;
    import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    @Slf4j
    @RestController
    public class Controller {
    
        /*
        * 负载均衡器,帮我们从注册中心拉取的服务列表中挑选一个可用的serviceprovider
        * */
        @Autowired
        private LoadBalancerClient client;
    
        @Autowired
        private RestTemplate restTemplate;
    
        @GetMapping("/hello")
        public String hello(){
            /*
            * 1.拿到服务提供者的实例
            * 2.借助RestTemplate发起真实的服务调用
            * 3.单独声明RestTemplate
            * */
            ServiceInstance instance = client.choose("eureka-client");
    
            /*
            * 防疫性编程:假定所有的输入都是不安全的,instance可能get到空
            * */
            if (instance == null) {
                return "No aviliable instance";
            }
            String target = String.format("http://%s:%s/sayHi",instance.getHost(),instance.getPort());
            log.info("url is {}",target);
            return restTemplate.getForObject(target, String.class);
        }
    
        @PostMapping("/hello")
        public Friend helloPost(){
            /*
             * 1.拿到服务提供者的实例
             * 2.借助RestTemplate发起真实的服务调用
             * 3.单独声明RestTemplate
             * 4.启动顺序:启动注册中心->服务提供者->服务消费者
             * */
            ServiceInstance instance = client.choose("eureka-client");
    
            /*
             * 防疫性编程:假定所有的输入都是不安全的,instance可能get到空
             * */
            if (instance == null) {
                return null;
            }
            String target = String.format("http://%s:%s/sayHi",instance.getHost(),instance.getPort());
            log.info("url is {}",target);
            Friend friend = new Friend();
            friend.setName("eureka-consumer");
            return restTemplate.postForObject(target, friend,Friend.class);
    
        }
    }
    
    3. Entry
    package com.imooc.springcloud;
    
    import lombok.Data;
    
    @Data
    public class Friend {
        private String name;
        private String port;
    }
    
    

    相关文章

      网友评论

          本文标题:7.服务治理-Eureka-创建服务消费者

          本文链接:https://www.haomeiwen.com/subject/jmdmihtx.html