Spring Cloud快速入門
代碼地址:
https://gitee.com/gloryxu/spring-cloud-test
EureKa:服務注冊中心
添加依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
開啟Eureka Server
@EnableEurekaServer @SpringBootApplication public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); } }
配置
#設置tomcat服務端口號 server.port=8101 # 本地調試環境下關閉自我保護機制 eureka.server.enable-self-preservation=false # 清理間隔時間,單位為毫秒 eureka.server.eviction-interval-timer-in-ms=5000 #設置服務名稱 spring.application.name=eureka-service eureka.instance.hostname=localhost #注冊中心不需要注冊自己 eureka.client.register-with-eureka=false #注冊中心不需要去發現服務 eureka.client.fetch-registry=false #設置服務注冊中心的URL eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka
啟動成功
2.創建一個服務提供者
添加依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
@EnableDiscoveryClient // 聲明這是一個Eureka Client @SpringBootApplication public class Server1Application { public static void main(String[] args) { SpringApplication.run(Server1Application.class, args); } }
添加配置
server.port=9090 #設置服務名 spring.application.name=hello-service #設置服務注冊中心的URL,本服務要向該服務注冊中心注冊自己 eureka.client.serviceUrl.defaultZone=http://localhost:8101/eureka
添加Controller
@RestController public class HelloController { Logger logger = LoggerFactory.getLogger(HelloController.class); @RequestMapping("/hello") public String hello() { return "hello"; } }
啟動注冊成功
3.創建一個消費者
添加依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
LoadBalanced 方式可實現負載均衡
@EnableFeignClients @EnableDiscoveryClient @SpringBootApplication public class ConsumerApplication { @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } }
添加配置
server.port=2222 spring.application.name=hello-consumer eureka.client.serviceUrl.defaultZone=http://localhost:8101/eureka/
聲明Feign方式 ,value為注冊的服務名
@FeignClient(value = "hello-service") public interface HelloService { @RequestMapping(value = "/hello") String hello(); }
以下以兩種方式調用服務提供者,一種是以Rest方式,另一種以Feign方式
@RestController public class ConsumerController { Logger logger = LoggerFactory.getLogger(ConsumerController.class); @Autowired private RestTemplate restTemplate; @Autowired HelloService helloService; @GetMapping("/getserver") public String getserver() { String xx=restTemplate.getForObject("http://hello-service/hello", String.class); return "consumer finish result:"+xx; } @GetMapping("/gettest") public String gettest(){ return helloService.hello(); } }
啟動
4.創建Zuul路由
添加依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency>
加入注解,以便注冊到注冊中心
@EnableZuulProxy @SpringBootApplication public class ZuulApplication { public static void main(String[] args) { SpringApplication.run(ZuulApplication.class, args); } }
配置路由,以下是以服務的方式調用
spring.application.name=eureka-zuul server.port=8765 zuul.routes.hello-service.path=/hello-service/** zuul.routes.hello-service.serviceId=hello-service eureka.client.serviceUrl.defaultZone=http://localhost:8101/eureka/
啟動 注冊成功,調用成功