1. 程式人生 > >springCloud入門(三)遠端呼叫方法

springCloud入門(三)遠端呼叫方法

新建一個客戶端呼叫已經註冊的遠端伺服器方法:

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion
>
4.0.0</modelVersion> <groupId>demo</groupId> <artifactId>cloud-simple-ui</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId
>
spring-boot-starter-parent</artifactId> <version>1.3.5.RELEASE</version> </parent> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId
>
spring-cloud-dependencies</artifactId> <version>Brixton.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.7</java.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-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- 使用eureka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <!-- 使用hystrix --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency> <dependency> <groupId>org.jolokia</groupId> <artifactId>jolokia-core</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> <defaultGoal>compile</defaultGoal> </build> </project>

user實體類

public class User {

    private String username;
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

userService 服務類

@Service
public class UserService {
     @Autowired  
     RestTemplate restTemplate;

     final String SERVICE_NAME="遠端呼叫的服務名稱";

     @HystrixCommand(fallbackMethod = "fallbackSearchAll")
     //這裡使用了斷路器,就是@HystrixCommand註解。斷路器的基本作用就是@HystrixCommand註解的方法失敗後,系統將自動切換到fallbackMethod方法執行。斷路器Hystrix具備回退機制、請求快取和請求打包以及監控和配置等功能
     public List<User> readUserInfo() {
         return restTemplate.getForObject("http://"+SERVICE_NAME+"/user", List.class);
    }    
     private List<User> fallbackSearchAll() {
         //這裡是被@HystrixCommand方法註解過的方法失敗後執行的方法
     }
}

UserController 控制器

@RestController
public class UserController {

    @Autowired
    UserService userService;
    @RequestMapping(value="/users")
    public ResponseEntity<List<User>> readUserInfo(){
        List<User> users=userService.readUserInfo();        
        return new ResponseEntity<List<User>>(users,HttpStatus.OK);
    }
}

bootstrap.properties 配置檔案

spring.cloud.config.uri=http://127.0.0.1:${config.port:8888}
spring.cloud.config.name=cloud-config
spring.cloud.config.profile=${config.profile:dev}
eureka.client.serviceUrl.defaultZone=http\://localhost\:8761/eureka/
#service name
spring.application.name=當前專案註冊eureka的名字
#ribbon config
cloud-simple-service.ribbon.ConnectTimeout=5000
cloud-simple-service.ribbon.ReadTimeout=10000
server.port=8080

啟動類

public class WebApplication {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(WebApplication.class, args);
    }
}

啟動程式後就可以在eureka中發現服務,訪問URL即可遠端呼叫方法。