• SpringCloud(八)Consul的微服务注册


    将微服务注册到Consul

    1 入门案例

    提供一个商品微服务

    提供一个订单系统

    将微服务注册到Consul

    依赖

    provider

     <!--SpringCloud提供的对于Consul的服务发现-->
             <dependency>
                 <groupId>org.springframework.cloud</groupId>
                 <artifactId>spring-cloud-starter-consul-discovery</artifactId>
             </dependency>
             <!--actuator健康检查-->
             <dependency>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-starter-actuator</artifactId>
             </dependency>
     
     

    orderservice

     <!--SpringCloud提供的对于Consul的服务发现-->
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-consul-discovery</artifactId>
     </dependency>
     <!--actuator健康检查-->
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-actuator</artifactId>
     </dependency>

    配置

     spring:
      application:
        name: service-product #服务名称
      cloud:
        consul:
          host: 127.0.0.1 #consul服务器的主机地址
          port: 8500 #consul的端口号
          discovery:
             #是否需要注册
            register: true
             #注册的实例ID(唯一标志)
            instance-id: ${spring.application.name}+${random.int}
             #服务的名称
            service-name: ${spring.application.name}
             #服务的请求端口
            port: ${server.port}
             #指定开启IP地址注册
            prefer-ip-address: true
             #当前服务的请求IP
            ip-address: ${spring.cloud.client.ip-address}
     

    `

     package com.qqq;
     
     import org.springframework.boot.SpringApplication;
     import org.springframework.boot.autoconfigure.SpringBootApplication;
     import org.springframework.boot.autoconfigure.domain.EntityScan;
     import org.springframework.cloud.client.loadbalancer.LoadBalanced;
     import org.springframework.context.annotation.Bean;
     import org.springframework.web.client.RestTemplate;
     
     @SpringBootApplication
     @EntityScan("com.qqq.entity")
     public class OrderApplication {
         public static void main(String[] args) {
             SpringApplication.run(OrderApplication.class,args);
        }
         /**
          * eureka和consul都集成了Ribbon
          * 使用spring提供的RestTemplate发送http请求到商品服务
          * 1 将RestTemplate对象交给容器管理
          * 2 使用其方法完成操作
          */
         @LoadBalanced //Ribbon自带的负载均衡的注解
         @Bean
         public RestTemplate restTemplate()
        {
             return new RestTemplate();
        }
     
     
     }
     package com.qqq.controller;
     
     import com.qqq.entity.Product;
     import org.springframework.beans.factory.annotation.Autowired;
     import org.springframework.cloud.client.ServiceInstance;
     import org.springframework.cloud.client.discovery.DiscoveryClient;
     import org.springframework.cloud.client.loadbalancer.LoadBalanced;
     import org.springframework.web.bind.annotation.PathVariable;
     import org.springframework.web.bind.annotation.RequestMapping;
     import org.springframework.web.bind.annotation.RequestMethod;
     import org.springframework.web.bind.annotation.RestController;
     import org.springframework.web.client.RestTemplate;
     
     import java.util.List;
     
     @RestController
     @RequestMapping("/order")
     public class OrderController {
         //注入RestTemplate对象
         @Autowired
         private RestTemplate restTemplate;
         /**
          * 注入DiscoveryClient
          * SpringCloud提供的获取元数据的工具类
          * 调用方法获取服务的元数据信息
          */
         @Autowired
         private DiscoveryClient discoveryClient;
         /**
          * 参数:商品ID
          * 通过订单系统,调用商品服务根据id查询商品信息
          * 1 需要配置一个商品对象
          * 2 需要调用商品服务
          * 使用java中的urlConnection完成,或使用httpClient,okHttp
          * RestTemplate
          */
     //   @RequestMapping(value = "/buy/{id}",method = RequestMethod.GET)
     //   public Product findById(@PathVariable("id") Long id)
     //   {
     //       //调用DiscoveryClient的getInstances方法根据服务名获取元数据
     //       List<ServiceInstance> instances = discoveryClient.getInstances("SERVICE-PRODUCT");
     //       //获取唯一的元数据
     //       ServiceInstance instance = instances.get(0);
     //       Product product=null;
     //       //如何调用商品服务
     //       //根据元数据和端口号拼接请求的url
     //       product=restTemplate.getForObject("http://"+instance.getHost()+":"+instance.getPort()+"/product/"+id,Product.class);
     //       return product;
     //   }
     
         /**
          *
          * 基于Ribbon的形式调用远程微服务
          * @param id
          * @return
          */
         @RequestMapping(value = "/buy/{id}",method = RequestMethod.GET)
         public Product findById(@PathVariable("id") Long id)
        {
             Product product=null;
             product=restTemplate.getForObject("http://service-product/product/"+id,Product.class);
             return product;
        }
     }
  • 相关阅读:
    zookeeper分布式锁和服务优化配置
    【转】从Mac/OS和iOS开放源码浅谈UNIX家谱
    【转】深入了解CPU两大架构ARM与X86
    【转】volatile关键字。编译器不优化,多线程会改。防止随时变动的
    栈,寄存器,局部变量,内存,语言级别优化程序的方法
    在coursera上有哪些值得推荐的课程
    【转】楼天城楼教主的acm心路历程(作为励志用)
    硬中断软中断
    CPU GPU FPU TPU 及厂商
    C#中使用DLL相关问题
  • 原文地址:https://www.cnblogs.com/qyx66/p/12293590.html
Copyright © 2020-2023  润新知