目录
2.1.2 启动器(加入注解@EnableEurekaServer )
2.2.2 启动器(加入注解@EnableDiscoveryClient )
2.3.3 启动器(加入注解@EnableDiscoveryClient )
访问 http://localhost:9000/payment/123 证明支付工程配置正确
访问 http://localhost:9001/order/payment/123 结果如下图,证明订单工程成功调用了支付工程配置正确
1.Eureka简介
2.Eureka⼊⻔案例(IDEA ,jdk11)
2.1 EurekaServer (服务注册中心)
首先准备一个空项目 File -> New -> Project..
选择自己的JDK版本
创建 EurekaServer
File -> new -> Module
2.1.1 pom文件内容
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.12</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.csh</groupId> <artifactId>Eureka-Bill</artifactId> <version>0.0.1-SNAPSHOT</version> <name>Eureka-Bill</name> <description>Demo project for Spring Boot</description> <properties> <java.version>11</java.version> <spring-cloud.version>2020.0.4</spring-cloud.version> </properties> <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-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </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> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
2.1.2 启动器(加入注解@EnableEurekaServer )
@SpringBootApplication@EnableEurekaServerpublic class EurekaApplication {public static void main( String [] args) {SpringApplication.run(EurekaApplication. class , args);}}
2.1.3 配置文件
server: port: 9004 spring: application: name: eureka-server eureka: client: service-url: # eureka 服务地址,如果是集群的话;需要指定其它集群eureka地址 defaultZone: http://127.0.0.1:9004/eureka/ # 不注册⾃⼰ register-with-eureka: false # 不拉取服务 fetch-registry: false
2.1.4 启动并测试
启动应⽤访问http://localhost:9004/,效果如下图所示。
2.2 cloud_payment(支付工程:服务提供者)
选择下⾯依赖,如下图所示。 (注意Spring Boot版本)
● Spring Boot 2.4.12
● Spring Boot DevTools
● Lombok
2.2.1 pom文件内容
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.12</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>cloud_payment</artifactId> <version>0.0.1-SNAPSHOT</version> <name>cloud_payment</name> <description>Demo project for Spring Boot</description> <properties> <spring-cloud.version>2020.0.3</spring-cloud.version> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <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>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
2.2.2 启动器(加入注解@EnableDiscoveryClient )
@SpringBootApplication @EnableDiscoveryClient public class BillApplication { public static void main(String[] args) { SpringApplication.run(BillApplication.class, args); } }
2.2.3 配置文件
server: port: 9000 spring: application: name: cloud-payment eureka: client: service-url: defaultZone: http://127.0.0.1:9004/eureka/ register-with-eureka: true fetch-registry: true
2.2.4 启动并测试
首先启动服务注册中心,然后再启动支付工程访问http://localhost:9004/,效果如下图所示。有红色底线标识证明我们配置成功
2.2.5 配置支付项目
controller
@RestController
@RequestMapping("/payment")
public class PaymentController {
@GetMapping("/{id}")
public ResponseEntity<Payment> payment(@PathVariable("id") Integer id) {
Payment payment = new Payment(id, "⽀付成功");
return ResponseEntity.ok(payment);
}
}
entity
@Data//@Data 生成getter,setter ,toString等函数
@NoArgsConstructor//@NoArgsConstructor 生成无参构造函数
@AllArgsConstructor//@AllArgsConstructor 生成全参数构造函数
public class Payment {
/*** 订单编号 */
private Integer id;
/*** ⽀付状态 */
private String message;
}
2.3 cloud_order (订单⼯程 :服务消费者)
根据2.1 与 2.2 order 工程如下
2.3.1 pom文件内容
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.12</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>cloud_order</artifactId> <version>0.0.1-SNAPSHOT</version> <name>cloud_payment</name> <description>Demo project for Spring Boot</description> <properties> <spring-cloud.version>2020.0.3</spring-cloud.version> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <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>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
2.3.2 配置文件
server: port: 9001 spring: application: name: cloud-order eureka: client: service-url: defaultZone: http://127.0.0.1:9004/eureka/ register-with-eureka: true fetch-registry: true
2.3.3 启动器(加入注解@EnableDiscoveryClient )
RestTemplate
Spring提供了⼀个RestTemplate模板⼯具类,对基于Http的客户端进⾏了封装,并且实现了对象与json 的序列化和反序列化,⾮常⽅便。RestTemplate并没有限定Http的客户端类型,⽽是进⾏了抽象,⽬前
常⽤的3种都有⽀持:
@SpringBootApplication @EnableDiscoveryClient public class CloudOrderApplication { public static void main(String[] args) { SpringApplication.run(CloudOrderApplication.class, args); } @Bean public RestTemplate restTemplate() { return new RestTemplate(); } }
2.3.4 启动并测试
访问http://localhost:9004/,效果如下图所示。有红色底线标识证明我们配置成功
2.3.5 配置订单工程
controller
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/payment/{id}")
public ResponseEntity<Payment> getPaymentById(@PathVariable("id") Integer id) {
String url = "http://localhost:9000/payment/" + id;
Payment payment = restTemplate.getForObject(url, Payment.class);
return ResponseEntity.ok(payment);
}
}
entity
@Data//@Data 生成getter,setter ,toString等函数
@NoArgsConstructor//@NoArgsConstructor 生成无参构造函数
@AllArgsConstructor//@AllArgsConstructor 生成全参数构造函数
public class Payment {
/*** 订单编号 */
private Integer id;
/*** ⽀付状态 */
private String message;
}