• springcloud的服务提供者与服务消费者


    1、说明

    springcloud中由服务消费者调用服务提供者一共有两种方法rest和feign

    2、feign

    (1)使用feign的方式进行服务调,搭建服务提供者。

    1. 创建一个web项目(服务提供者)
    2. 修改pom文件
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-eureka</artifactId>
          <version>1.4.4.RELEASE</version>
      </dependency>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      
    3. 在项目启动类上加@EnableDiscoveryClient注解
    4. 添加配置文件
      spring.application.name=spring-cloud-producer
      server.port=9000
      #将服务注册的地址
      eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
      
    5. 编写测试代码
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RequestParam;
      import org.springframework.web.bind.annotation.RestController;
      
      @RestController
      public class HelloController {
          @RequestMapping("/hello")
          public String index(@RequestParam String name) {
              return "这是服务提供者,参数:"+name;
          }
      }
      

         6、效果

    (2)使用feign的方式进行服务调,搭建服务消费者。

    1. 创建一个web项目(服务消费者)
    2. 修改pom文件
      <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter</artifactId>
      </dependency>
       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-feign</artifactId>
           <version>1.4.4.RELEASE</version>
      </dependency>
      <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-eureka</artifactId>
           <version>1.4.4.RELEASE</version>
      </dependency>
      
    3. 在项目启动类上加@EnableDiscoveryClient 启动服务注册和发现 @EnableFeignClients 启用feign进行远程调用 注解
    4. 添加配置文件
      spring.application.name=spring-cloud-consumer
      server.port=9001
      eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
      
    5. 编写测试代码

                  5.1编写调用接口

    import org.springframework.cloud.netflix.feign.FeignClient;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    
    // name的值是服务提供者的配置文件中的spring.application.name
    @FeignClient(name= "spring-cloud-producer")
    public interface HelloRemote {
        @RequestMapping(value = "/hello")
        String hello(@RequestParam(value = "name") String name);
    }
    

                5.2编写调用类

    import com.comsuer.comsuer.Service.HelloRemote;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class helloController {
        @Autowired
        private HelloRemote helloRemote;
    
        @RequestMapping("/hello/{name}")
        public String index(@PathVariable("name") String name) {
            return helloRemote.hello(name);
        }
    
    }
    

           6. 效果

          

     3、rest

    springcloud使用rest+ribbon实现服务调用和服务提供者的负载均衡

    (1)搭建服务提供者

    1. 创建一个web项目
    2. 修改pom文件
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
      </dependency>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      
    3. 在启动类上加@EnableDiscoveryClient 注解
    4. 添加配置文件
      spring.application.name=spring-cloud-producer
      server.port=9000
      eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
      
    5. 编写测试代码
      import org.springframework.web.bind.annotation.PostMapping;
      import org.springframework.web.bind.annotation.RequestBody;
      import org.springframework.web.bind.annotation.ResponseBody;
      import org.springframework.web.bind.annotation.RestController;
      
      @RestController
      public class HelloController {
          @PostMapping("/hello")
          @ResponseBody
          public String index(@RequestBody String name) {
              return "第一个提供者"+name;
          }
      }
      
    6. 按照上面的五个步骤再构建一个服务提供者

    (2)搭建服务消费者

    1. 创建一个web项目
    2. 修改配置文件
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-ribbon</artifactId>
         <version>1.4.4.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
        <version>1.4.4.RELEASE</version>
      </dependency>
      <dependency>
      <groupId>com.alibaba</groupId>
         <artifactId>fastjson</artifactId>
         <version>1.2.49</version>
      </dependency>
      
    3. 在启动类上添加@EnableDiscoveryClient 注解,并修改启动类的代码,修改如下
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
      import org.springframework.cloud.client.loadbalancer.LoadBalanced;
      import org.springframework.context.annotation.Bean;
      import org.springframework.web.client.RestTemplate;
      
      @SpringBootApplication
      @EnableDiscoveryClient
      public class ComsuerApplication {
      
          public static void main(String[] args) {
              SpringApplication.run(ComsuerApplication.class, args);
          }
          // 实现负载均衡
          @Bean
          @LoadBalanced
          RestTemplate restTemplate(){
              return new RestTemplate();
          }
      }
      
    4. 添加配置文件
      spring.application.name=spring-cloud-consumer
      server.port=9001
      eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
      
    5. 编写测试代码
      import com.alibaba.fastjson.JSON;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.web.bind.annotation.PostMapping;
      import org.springframework.web.bind.annotation.ResponseBody;
      import org.springframework.web.bind.annotation.RestController;
      import org.springframework.web.client.RestTemplate;
      
      @RestController
      public class helloController {
      
          @Autowired
          private RestTemplate rest;
          @PostMapping("/hello")
          @ResponseBody
          public String hello(String name){
              System.err.println(name);
              String url = "http://spring-cloud-producer/hello";
              User user = new User();
              user.setName(name);
              user.setId("1");
              String s1 = JSON.toJSONString(user);
              String s = rest.postForObject(url, s1, String.class);
              return s;
          }
      }
      

    rest调用效果,会调一次一,调一次二

    4.总结

    feign方式的负载均衡和rest步骤基本一样。

  • 相关阅读:
    fms服务器端呼叫客户端
    Linux C取整的方法
    fms客户端呼叫服务器端
    Tree Control DataProviders
    IE7下的css style display的兼容处理
    Maxthon,TheWorld,MyIE等多标签浏览器的Flash缓存问题
    Android深入浅出系列之实例应用—弹出消息Toast对象的使用纯文本方式(一)
    C#温故而知新学习系列之XML编程—Xml读取器XmlReader类(二)
    一步一个脚印学习WCF系列之WCF概要—生成元数据与代理(五)
    Eclipse 常用快捷键(转)
  • 原文地址:https://www.cnblogs.com/lu51211314/p/9625997.html
Copyright © 2020-2023  润新知