SpringClude核心组件之Eureka

SpringClude核心组件之Eureka
通过代码来实现一个案例:

  1. 搭建一个Eureka Server
    首先通过Idea的Spring Initializr插件创建一个SpringBoot项目
    SpringClude核心组件之Eureka
    依赖选择为web和Eureka Server
    SpringClude核心组件之Eureka
    项目创建完成之后进去到启动类,添加注解@EnableEurekaServer开启注册中心。
    SpringClude核心组件之Eureka
    在application.properties文件中添加配置信息
    SpringClude核心组件之Eureka
    在hosts文件中添加一行
    SpringClude核心组件之Eureka
    启动Eureka Server,就可以在浏览器中查看注册中心的状态。
    SpringClude核心组件之Eureka
  2. 搭建提供服务的order
    创建一个新的Spring Boot项目,依赖选择 web和DEureka Discovery
    在启动类中添加注解@EnableEurekaClient开启注册中心
    SpringClude核心组件之Eureka
    写一个Controller来提供对应的服务
@Controller
@RequestMapping("order")

public class TestController {

    @Value("${server.port}")
    private String port;

    @RequestMapping("create")
    @ResponseBody
    public  String create(String name){

        return "order create successful ,name="+name+" ,port="+port;
    }
}

在application.properties文件中添加配置信息
SpringClude核心组件之Eureka
启动order,浏览器中会出现新注册的服务
SpringClude核心组件之Eureka
3. 搭建一个需要获取order服务的customer
创建一个新的Spring Boot项目,依赖选择 web和DEureka Discovery
在启动类中添加注解@EnableEurekaClient开启注册中心
写一个Controller来通过微服务调用

@Controller
@RequestMapping("test")
public class Test {
    @Autowired
    private DiscoveryClient discoveryClient;

    @RequestMapping("testv1")
    @ResponseBody
    public String testOrderWithEurake() throws Exception{
        List<ServiceInstance>  instanceList=discoveryClient.getInstances("order");
        ServiceInstance serviceInstance=instanceList.get(0);
        String host=serviceInstance.getHost();
        String port=serviceInstance.getPort()+"";
        String url="http://"+host+":"+port+"/order/create?name=张三";

        HttpClient httpClient=new DefaultHttpClient();
        HttpPost httpPost=new HttpPost(url);
        HttpResponse response=httpClient.execute(httpPost);
        String res="";
        if (response.getStatusLine().getStatusCode()==200){
            res=EntityUtils.toString(response.getEntity());
        }

        return res;
    }

    //负载均衡
    @Bean
    @LoadBalanced
    public  RestTemplate resTemplate(){
        return new RestTemplate();
    }

    @Autowired
    RestTemplate restTemplate;
    @RequestMapping("testv2")
    @ResponseBody
    public String testOrderWithRestTemplate() throws Exception {
         return restTemplate.getForObject("http://order/order/create?name=李四",
                String.class,"");

    }

}