SpringBoot集成SpringCloud
基于springboot2.6.3,僅介紹單機版,分布式開發略有不同
大致步驟:
- 新建module A,選擇eureka作為注冊中心,啟動類上添加@EnableEurekaServer,添加pom依賴
- 服務提供者module B(注冊到注冊中心的業務處理者)啟動類添加@EnableEurekaClient與相關依賴
- 消費者module C(發現服務并消費的服務)啟動類添加@EnableFeignClients、@EnableDiscoveryClient與相關依賴
- 消費者通過FeignClient行程服務間的呼叫

詳細步驟:
1、新建 module A 作為注冊中心的服務
? 地址:localhost:8900
-
選擇Eureka Server(不選擇也行,手動在pom中添加依賴)

-
配置yml
server: port: 8900 eureka: instance: hostname: localhost client: #單機版不用把本身注冊進去 register-with-eureka: false fetch-registry: false service-url: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ -
添加依賴
<properties> <java.version>1.8</java.version> <spring-cloud.version>2021.0.0</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> -
啟動類添加注解
@EnableEurekaServer @SpringBootApplication public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
2、處理服務提供者module B
? 地址:localhost:8086
-
yml配置
server: port: 8086 spring: datasource: #mysql driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2b8 username: root password: root application: #定義應用程式的名稱,注冊中心使用 name: producer eureka: client: service-url: #注冊中心地址 defaultZone: http://localhost:8900/eureka/ -
添加pom
<dependencies> <!-- eureka客戶端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!-- 其他依賴 --> </dependencies> <dependencyManagement> <!-- 與注冊中心版本保持一致 --> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>2021.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> -
啟動類添加依賴
@EnableEurekaClient @SpringBootApplication public class ProducerApplication { public static void main(String[] args) { SpringApplication.run(ProducerApplication.class, args); } } -
controller示例
@RestController public class ProductController { @RequestMapping(value = "https://www.cnblogs.com/william-m/archive/2022/03/10/select", method = RequestMethod.GET) public String select(@RequestParam Long id) { return "id===="+id; } }
3、消費者module C
? 服務地址:localhost:8088
-
配置yml
spring: application: name: consumer server: port: 8088 eureka: client: service-url: defaultZone: http://localhost:8900/eureka/ -
添加pom
<dependencies> <!-- Eureka客戶端依賴 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!-- 用來宣告feign可以進行服務間呼叫 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> <version>1.4.7.RELEASE</version> </dependency> <!--其他依賴 --> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>2021.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> -
啟動類:
// 開啟feign進行遠程呼叫 @EnableFeignClients // 開啟發現其他服務 @EnableDiscoveryClient @SpringBootApplication public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } } -
controller示例:
現在需要通過consumer去呼叫producer的select方法,在consumer中先定義一個controller接收請求
@RestController public class ConsumerController { @Autowired ProducerService producerService; @RequestMapping(value = "https://www.cnblogs.com/william-m/archive/2022/03/10/selectProducerById", method = RequestMethod.GET) public String selectProducerById(@RequestParam Long id) { return producerService.select(id); } } -
ProducerService介面
上面producerService的定義
/** value="https://www.cnblogs.com/william-m/archive/2022/03/10/需要遠程呼叫的應用的名稱" 這里對應提供者module A的應用名稱producer **/ @FeignClient(value = "https://www.cnblogs.com/william-m/archive/2022/03/10/producer") public interface OrderService { //對應于ProducerController中的select方法 @RequestMapping(value = "https://www.cnblogs.com/william-m/archive/2022/03/10/select", method = RequestMethod.GET) String select(@RequestParam Long id); }
通過呼叫消費者module C 的ConsumerController的selectProducerById方法
來請求提供者module A 的ProducerController中的select方法:
localost:8088/selectProducerById?id=1
回傳結果: id====1
本文來自博客園,作者:醉千燈,轉載請注明原文鏈接:https://www.cnblogs.com/william-m/p/15991511.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/440520.html
標籤:其他
