SpringClude核心组件之Eureka
通过代码来实现一个案例:
- 搭建一个Eureka Server
首先通过Idea的Spring Initializr插件创建一个SpringBoot项目
依赖选择为web和Eureka Server
项目创建完成之后进去到启动类,添加注解@EnableEurekaServer开启注册中心。
在application.properties文件中添加配置信息
在hosts文件中添加一行
启动Eureka Server,就可以在浏览器中查看注册中心的状态。 - 搭建提供服务的order
创建一个新的Spring Boot项目,依赖选择 web和DEureka Discovery
在启动类中添加注解@EnableEurekaClient开启注册中心
写一个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文件中添加配置信息
启动order,浏览器中会出现新注册的服务
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,"");
}
}