springcloud之使用eureka例子

搭建Eureka Server

1-创建工程  eureka_server子模块

springcloud之使用eureka例子_第1张图片

2-导入坐标

eureka_server的pom.xml



    
        spring_cloud_demo
        cn.test
        1.0-SNAPSHOT
    
    4.0.0

    eureka_server

    
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-server
        
    

3-配置application.yml

server:
  port: 9000 #端口
#配置eureka server
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false #是否将自己注册到注册中心
    fetch-registry: false #是否从eureka中获取注册信息
    service-url: #配置暴露给Eureka Client的请求地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

4-配置启动类

eureka server中新建包cn.itcast.eureka,新建启动类EurekaServerApplication

package cn.itcast.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer   //激活eureka server
public class EurekaServerApplication {

    public static void main(String[] args) {

        SpringApplication.run(EurekaServerApplication.class,args);
    }
}

启动

springcloud之使用eureka例子_第2张图片

springcloud之使用eureka例子_第3张图片

将服务提供者注册到注册中心eureka server上

1-引入EurekaClient的坐标

修改product_service子工程的pom.xml

                   添加依赖

        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        

2-修改application.yml,添加Eureka Server的信息

修改product_service子工程的resources中的application.yml,添加

#配置Eureka
eureka:
  client:
    service-url:
      defaultZone: http://localhost:9000/eureka/
  instance:
    prefer-ip-address: true #使用ip地址注册

3-修改启动类,添加服务发现的支持(可选)

修改product_service子工程的启动类ProductApplication

package cn.itcast.product;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;

@SpringBootApplication
@EntityScan("cn.itcast.product.entity")  //用来扫描和发现指定包及其子包中的Entity定义
//激活EurekaClient   @EnableEurekaClient == @EnableDiscoveryClient == 不写也行
public class ProductApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProductApplication.class,args);
    }
}

启动

验证:

springcloud之使用eureka例子_第4张图片

服务消费者通过注册中心获取服务列表并调用

Eureka中的元数据:服务的主机名,ip,等信息.可以通过eureka server进行获取,用于服务之间的调用.

1-引入EurekaClient的坐标

修改order_service子工程的pom.xml,同上

2-修改application.yml,添加Eureka Server的信息

修改order_service子工程的resources中的application.yml,添加...同上

3-修改启动类,添加服务发现的支持(可选)

修改order_service子工程的启动类OrderApplication\

4-修改order_service的子模块的controller类OrderController

调用DiscoveryClient方法

package cn.itcast.order.controller;

import cn.itcast.order.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.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;

    @Autowired
    //import org.springframework.cloud.client.discovery.DiscoveryClient;
    /**
     * 注入DiscoveryClient:springcloud提供的获取元数据的工具类,调用方法获取服务的元数据信息
     */
    private DiscoveryClient discoveryClient;

    /**
     *
     * @param id 商品id
     * @return
     * 通过订单系统,调用商品服务根据id查询商品信息
     *   1-需要配置商品服务
     *   2-需要调用商品服务
     */
//    @RequestMapping(value = "/buy/{id}",method = RequestMethod.GET)
//    public Product findById(@PathVariable Long id){
//        Product product = null;
//        //如何调用远程服务?
//        product = restTemplate.getForObject("http://127.0.0.1:9001/product/1",Product.class);
//        return product;
//    }
    @RequestMapping(value = "/buy/{id}",method = RequestMethod.GET)
    public Product findById(@PathVariable Long id){
        //已调用服务名称获取所有的元数据
        List instances = discoveryClient.getInstances("service-product");

        //获取唯一的一个元数据
        ServiceInstance instance = instances.get(0);
        
        Product product = null;
        //根据元数据的主机地址和端口号拼接请求微服务的URL
        product = restTemplate.getForObject("http://"+instance.getHost()+":"+instance.getPort()+"/product/1",Product.class);
        return product;
    }
}

5-启动OrderApplication

springcloud之使用eureka例子_第5张图片

此时,不满足高可用性

springcloud之使用eureka例子_第6张图片

你可能感兴趣的:(学习笔记,springcloud)