application.yml
server:
port: 8030
spring:
application:
name: user-hystrix
eureka:
instance:
prefer-ip-address: true
client:
service-url:
defualtZone: http://localhost:8761/eureka/
UserController:
package com.huizhi.userhystrix.controller;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class UserController {
@Autowired
private RestTemplate restTemplate;
/**
* 查找与用户相关的订单
*/
@GetMapping("/findOrderByUser/{id}")
@HystrixCommand(fallbackMethod = "fallbackInfo")
public String findOrderByUser(@PathVariable String id){
//假设用户只有一个订单,并且订单id为123
int orderid=123;
//直接使用IP
//return this.restTemplate.getForObject("http://localhost:8763/order/"+orderid,String.class);
//使用服务提供者的实例名称来执行已注册服务列表中实例的方法
return this.restTemplate.getForObject("http://order/order/"+orderid,String.class);
}
/**
* 返回信息方法,方法中的参数类型与原方法保持一致
*/
public String fallbackInfo(@PathVariable String id){
return "服务不可用,请稍后再试!";
}
}
UserHystrixApplication:
package com.huizhi.userhystrix;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableCircuitBreaker
@EnableEurekaClient
public class UserhystrixApplication {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(UserhystrixApplication.class, args);
}
}
pom.xml
<?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.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.huizhi</groupId>
<artifactId>userhystrix</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>userhystrix</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</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>
</plugin>
</plugins>
</build>
</project>
OrderController;
package com.huizhi.order2.controller;
import com.huizhi.order2.po.Order;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class OrderController {
@GetMapping("/order/{id}")
public String findOrderById(@PathVariable String id){
Order order=new Order();
order.setId("123");
order.setPrice(25.5);
order.setReceiverAddress("beijing");
order.setReceiverName("xiaowang");
order.setReceiverPhone("18900001234");
System.out.println("8764");
return order.toString();
}
}
application.yml
server:
port: 8764
spring:
application:
name: order
eureka:
instance:
prefer-ip-address: true
client:
service-url:
defualtZone: http://localhost:8761/eureka/~
Order:
package com.huizhi.order2.po;
public class Order {
private String id;
private Double price;
private String receiverName;
private String receiverAddress;
private String receiverPhone;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public String getReceiverName() {
return receiverName;
}
public void setReceiverName(String receiverName) {
this.receiverName = receiverName;
}
public String getReceiverAddress() {
return receiverAddress;
}
public void setReceiverAddress(String receiverAddress) {
this.receiverAddress = receiverAddress;
}
public String getReceiverPhone() {
return receiverPhone;
}
public void setReceiverPhone(String receiverPhone) {
this.receiverPhone = receiverPhone;
}
@Override
public String toString(){
return "Order[id="+id+",price="+price+"," +
"receiverName="+receiverName+"," +
"receiverAddress="+receiverAddress+"," +
"receiverPhone="+receiverPhone+"]";
}
}