项目基佬网址:https://github.com/woshiyinweijian/SpringCloudTest
上个小小例子记录了服务的注册,现在搞服务的发现。
新建一个项目:eureka-consumer(普通springboot项目)
application.yml配置如下:
spring: application: name: eureka-consumer
server: port: 8082
eureka: instance: hostname: 127.0.0.1 client: serviceUrl: defaultZone: http://127.0.0.1:8080/eureka/ # 服务的发现网址 |
启动类:EurekaConsumerApplication.java
package cn.ywj.eurekaconsumer;
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication public class EurekaConsumerApplication {
public static void main(String[] args) { SpringApplication.run(EurekaConsumerApplication.class, args); } } |
新建一个类:ConfigApp.java
package cn.ywj.eurekaconsumer;
import org.springframework.beans.factory.annotation.Configurable; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate;
@Configuration public class ConfigApp {
@Bean @LoadBalanced// 负载均衡作用 public RestTemplate getRestTemplate () { return new RestTemplate() ; } } |
其中@Configuration注解作用相当于一个application.xml,@Bean注解作用相当于application.xml中的<bean>的作用,这就注入了一个RestTemplate bean.
创建一个Controller:TestController.java
package cn.ywj.eurekaconsumer;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate;
@RestController public class TestController {
@Autowired RestTemplate restTemplate;
@RequestMapping("/test") public Object test(){ return restTemplate.getForObject("http://127.0.0.1:8081/test", String.class);// 请求eureka-provider } } |
结合前几个篇笔记,按顺序启动:eureka\eureka-provider\eureka-consumer
访问:http://127.0.0.1:8082/test 即可返回结果 “0”(provide项目里设置的), 不过这个样子Eureka没有什么意义,此时把
return restTemplate.getForObject("http://127.0.0.1:8081/test", String.class);
换成:
return restTemplate.getForObject("http://eureka-provider/test", String.class);,这时一样可以访问返回结果“0”, url中的eureka-provider是从哪里来的,是从euraka项目启动时,访问这个eureka项目里获取的,如下图红色部分:
这样子就可以直接通过eureka进行服务的注册和发现了。
OK,停笔休息。