第1步:創建Maven Project(作為工程根目錄)
1.1 點擊File > New > Project,選擇Maven工程
1.2 填寫GroupId和ArtifactId,ArtifactId會默認為工程名稱,點擊Next
1.3 可以選擇指定文件夾創建項目路徑,點擊Finish,完成創建。
1.4 工程結構如圖,因為后面會創建子工程(springcloud實際代碼模塊),所以src文件夾可以刪掉了
第2步:創建Module(SpringCloud Eureka模塊)
2.1 創建Module,選擇Spring Initializr,點擊Next
2.2 填寫Group和Artifact,選擇Java Version,修改Package名稱,點擊Next
2.3 選擇SpringCloud 組件配置,選擇左側Spring Cloud Discovery,然后選擇Eureka Server,同時也可以選擇工程基於的SpringBoot版本,這里我使用默認的,然后Next。
2.4 修改確認模塊名稱和創建路徑,確保路徑在剛剛創建的根項目路徑下,點擊Finish
2.5 生成的目錄結構如圖
2.6 配置application.yml,因為我偏好於使用yaml文件,所以將默認生成的application.properties修改成了application.yml,配置內容如下:
# 配置啟動端口 server: port: 8000 # 配置eureka服務注冊中心 eureka: instance: hostname: localhost # 實例名稱 client: registerWithEureka: false # 是否向注冊中心注冊自己,本身是服務端,不向自己注冊 fetchRegistry: false # 是否從Eureka獲取注冊信息,不需要,所以設置false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ # Eureka服務器的地址 # 指定應用名稱 spring: application: name: springcloud-eureka-server
2.7 啟動類添加@EurekaServer注解,最終代碼如下
package com.cning.eureka; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer @SpringBootApplication public class SpringcloudEurekaApplication { public static void main(String[] args) { SpringApplication.run(SpringcloudEurekaApplication.class, args); } }
2.8 現在已經可以啟動eureka注冊中心了,如圖
2.9 瀏覽器中輸入localhost:8000,可以看到打開了Eureka控制台界面
第3步:創建Module(Server模塊,Eureka Client)
3.1 創建module,選擇Spring Initializr,點擊Next,填寫Group和Artifact,完成后點擊Next,選擇Spring Cloud Discovery,然后選擇Eureka Discovery Client,點擊Next
3.2 調整目錄,保證module和剛才的springcloud-eureka同級
目錄結構如下圖:
3.3 pom.xml加入SpringBoot的依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.4.4</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
3.4 修改啟動類和application.yml,修改后內容如下
SpringcloudServiceApplication.java
package com.cning.service; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; // 加入注解 @EnableEurekaClient @SpringBootApplication public class SpringcloudServiceApplication { public static void main(String[] args) { SpringApplication.run(SpringcloudServiceApplication.class, args); } }
application.yml
server: port: 8001 #指定當前eureka客戶端注冊的服務端地址 eureka: client: service-url: defaultZone: http://${eureka.instance.hostname}:8000/eureka instance: hostname: localhost # 指定應用名稱 spring: application: name: springcloud-eureka-service
3.5 創建Service和Controller
在com.cning.server下新建package,命名為service,然后新建HelloService.java,內容如下
package com.cning.service.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; @Service public class HelloService { @Autowired private Environment environment; public String hello(){ return environment.getProperty("server.port"); } public String hello(String msg){ return String.format("收到消息:%s, 我是:%s", msg, environment.getProperty("server.port")); } }
在com.cning.server下新建package,命名為web,然后新建HelloController.java,內容如下
package com.cning.service.web; import com.cning.service.service.HelloService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/hello") public class HelloController { @Autowired HelloService helloService; @GetMapping("/") @ResponseBody public Object hello(@RequestParam(defaultValue = "") String msg){ System.out.println(msg); return helloService.hello(msg); } }
3.6 修改SpringcloudServiceApplication.java,在注解SpringBootApplication后加上(scanBasePackages = {"com.cning.service.service", "com.cning.service.web"})
3.7 運行SpringcloudServiceApplication.java,啟動成功后從Eureka管理台(localhost:8000)可以看到springcloud-eureka-service已經注冊
第4步:創建Module(SpringCloud Feign模塊)
創建和前面一樣,就不上圖了,注意選擇依賴的這一步,選擇Spring Cloud Routing中的OpenFeign,然后繼續
結構如下:
4.1 pom.xml加入eureka依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> <version>3.0.2</version> </dependency>
4.2 創建Feign接口類
在com.cning.feign下創建名為client的package,然后新建HelloServiceFeign.java,內容如下(不要忘了加@FeignClient注解)
package com.cning.feign.client; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; // 指定轉發請求的服務器名稱 spring.application.name @FeignClient(value = "springcloud-eureka-service") public interface HelloServiceFeign { @RequestMapping(value = "/hello", method = RequestMethod.GET) public String hello(String msg); }
4.3 創建Controller
在com.cning.feign下創建名為web的package,然后新建Controller.java,內容如下
package com.cning.feign.web; import com.cning.feign.client.HelloServiceFeign; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/feign") public class Controller { @Autowired HelloServiceFeign helloServiceFeign; @RequestMapping("/hello") public String hello(@RequestParam(defaultValue = "") String msg) { System.out.println("收到請求參數:"+msg+",調用服務"); return helloServiceFeign.hello(msg); } }
4.3 修改啟動類SpringcloudFeignApplication.java和application.yml
SpringcloudFeignApplication.java
package com.cning.feign; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; @EnableFeignClients @EnableDiscoveryClient @SpringBootApplication(scanBasePackages = {"com.cning.feign.client", "com.cning.feign.web"}) public class SpringcloudFeignApplication { public static void main(String[] args) { SpringApplication.run(SpringcloudFeignApplication.class, args); } }
application.yml
server: port: 8100 #指定當前eureka客戶端注冊地址 eureka: client: service-url: defaultZone: http://${eureka.instance.hostname}:8000/eureka instance: hostname: localhost # 指定應用名稱 spring: application: name: springcloud-feign
4.4 此時feign已經配置完成,為了驗證feign的負載均衡,我們在idea的Run/Debug配置中復制一個SpringcloudServiceApplication,如圖,設置端口為8002
4.5 啟動SpringcloudServiceApplication(8002)和SpringcloudFeignApplication,刷新Eureka控制台(localhost:8000),可以看到8002和feign都注冊到了Eureka
4.6 瀏覽器中訪問localhost:8100/feign/hello/你好,可以看到springcloud-service中的方法被調用,再次刷新訪問,可以發現每次調用不同端口。
參考:
https://blog.csdn.net/sinat_36665930/article/details/104698095
https://www.cnblogs.com/sharpest/p/13714079.html