環境
搭建註冊中心 Eureka-server
pom.xml 依賴以下所示:java
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> </dependency> </dependencies>
配置 Eureka application.propertiesweb
# 應用啓動端口 server.port=8090 # 註冊中心管理中的 應用名稱 spring.application.name=eureka-server # 登錄註冊管理中的的帳號密碼 spring.security.user.roles=SUPERUSER spring.security.user.name=eureka spring.security.user.password=123456 # 是否把本身註冊到註冊中心 eureka.client.register-with-eureka=true # 是否從eureka上來獲取服務的註冊信息 eureka.client.fetch-registry=false eureka.instance.hostname=localhost eureka.client.serviceUrl.defaultZone=http://eureka:123456@localhost:8090/eureka
啓動註冊中心 啓動後訪問(http://127.0.0.1:8090)spring
2. 輸入設置的帳號密碼(user:eureka pwd:123456) 3. 進入註冊中心頁面
EurekaServiceApplication.javaapi
@EnableEurekaServer @SpringBootApplication public class EurekaServiceApplication { public static void main(String[] args) { SpringApplication.run(EurekaServiceApplication.class, args); } //忽略 uri /eureka/** 的CSRF檢測 @EnableWebSecurity static class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().ignoringAntMatchers("/eureka/**"); super.configure(http); } } }
搭建服務提供者 Provider-service
首先仍是配置文件 application.propertiesapp
服務端口 server.port=8081 # 服務應用名稱 spring.application.name=provider-ticket # 是否容許使用ip鏈接 eureka.instance.ip-address=true # 注意 http://用戶名:密碼@主機:端口/eureka 須要與服務中內心配置的同樣 eureka.client.serviceUrl.defaultZone=http://eureka:123456@localhost:8090/eureka
TicketController.java負載均衡
package com.yourdream.providerticket.controller; import com.yourdream.providerticket.service.TicketService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TicketController { @Autowired TicketService ticketService; @GetMapping("/ticket") public String getTicket(){ System.out.println("server-8081"); return ticketService.getTicket(); } }
TicketServiceide
package com.yourdream.providerticket.service; import org.springframework.stereotype.Service; @Service public class TicketService { public String getTicket() { return "《哪吒之魔童降世》"; } }
ProviderTicketApplicationspring-boot
package com.yourdream.providerticket; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ProviderTicketApplication { public static void main(String[] args) { SpringApplication.run(ProviderTicketApplication.class, args); } }
搭建服務消費者 Consumer-user
server.port=8100 spring.application.name=consumer-user eureka.client.serviceUrl.defaultZone=http://eureka:123456@localhost:8090/eureka eureka.instance.ip-address=true
啓動入口 ConsumerUserApplication.java測試
package com.yourdream.consumeruser; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; @EnableDiscoveryClient //開啓發現服務功能 @SpringBootApplication public class ConsumerUserApplication { public static void main(String[] args) { SpringApplication.run(ConsumerUserApplication.class, args); } @LoadBalanced //開啓負載均衡器 @Bean //註冊 RestTemplate 服務 public RestTemplate restTemplate() { return new RestTemplate(); } }
UserController.javafetch
package com.yourdream.consumeruser.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController public class UserController { // 幫助咱們向 註冊的實例服務 發起http請求 @Autowired RestTemplate restTemplate; @GetMapping("/buy") public String buyTicket(String name) { //PROVIDER-TICKET 服務提供者名稱 String forObject = restTemplate.getForObject("http://PROVIDER-TICKET/ticket", String.class); return name + "購買了" + forObject; } }
原文