SpringCloud調用服務示例


SpringCloud調用服務示例。

SpringCloud簡介:

    Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現注冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,都可以用Spring Boot的開發風格做到一鍵啟動和部署。Spring並沒有重復制造輪子,它只是將目前各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通過Spring Boot風格進行再封裝屏蔽掉了復雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分布式系統開發工具包。

 

SpringCloud與Springboot內部以及集成好了,可以直接使用SpringBoot.

使用SpringCloud的調用需要新建三個maven項目,分別為eureka-server(服務注冊中心)    server-member(服務提供方) server-order(服務消費方)

 

(1)maven項目 eureka-server ,服務注冊方(類似於dubbo中使用的  zookeeper)

 項目目錄結構如下: 需要編寫的三個文件(EurekaApp.java    application.yml     pom.xml

 

 

 

EurekaApp.java   SpringBoot的啟動類,主要用於啟動項目,讀取配置文件信息

記得要添加注解  @EnableEurekaServer  ,標明這是個服務注冊中心

package springcloud.eureka_server.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
 * springcloud的注冊中心
 * @author Administrator
 * 啟動后,在瀏覽器通過 localhost:8888訪問
 */
@SpringBootApplication
@EnableEurekaServer
public class EurekaApp {
    
    public static void main(String[] args){
        SpringApplication.run(EurekaApp.class, args);
    }
}

 

application.yml   SpringCloud的主配置文件,里面定義配置信息

port 訪問指定端口號

defaultZone 指定訪問路徑為   http://localhost:8888

server:
  port: 8888                   # 指定該Eureka實例的端口
eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

 

pom.xml  Springboot與SpringCloud的依賴文件

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>springcloud</groupId>
    <artifactId>eureka-server</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka-server Maven Webapp</name>
    <url>http://maven.apache.org</url>
    
  <!-- 引入spring boot的依賴 -->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.3.RELEASE</version>
  </parent>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.7</java.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-eureka-server</artifactId>
    </dependency>
  </dependencies>

  <!-- 引入spring cloud的依賴 -->
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Camden.SR4</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <!-- 添加spring-boot的maven插件 -->
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

 

啟動項目

運行EurekaApp.java ,Run as  --- >>   Java Application

啟動成功后,在瀏覽器訪問:  http://localhost:8888 

訪問結果如下圖所示:

 

 

 

 

 

(2)maven項目server-member ,服務提供方 (類似dubbo的provider)

項目目錄結構如下,需要編寫的文件有四個(MemberApp.java   Member.controller.java  application.yml   pom.xml

 

MemberController.java  服務提供方的前端控制器類

@RestController  定義返回json數據

@RequestMapping 定義請求訪問路徑為 getMember

package springcloud.server_member.demo.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 會員服務
 * @author Administrator
 *
 */

@RestController
public class MemberController {
    
    @RequestMapping("/getMember")
    public List<String> getMember(){
        List<String> list = new ArrayList<String>();
            list.add("zhangsan");
            list.add("zhangsan1");
            list.add("zhangsan2");
            list.add("zhangsan3");
        return list;
    }
}

 

MemberApp.java  項目的SpringBoot啟動類

記得使用 @EnableEurekaClient 注解   標明這是一個服務Client,需要注冊在eureka上的一個服務

package springcloud.server_member.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
/**
 * 啟動會員服務
 * @author Administrator
 * 
 * 服務的調用: reset  feign 
 */
@SpringBootApplication
@EnableEurekaClient
public class MemberApp {
    
    public static void main(String[] args){
        SpringApplication.run(MemberApp.class, args);
    }
}

 

application.yml   SpringCloud的配置文件

server.port  定義訪問的端口

spring.application.name  定義服務名,在服務消費方通過這個服務名調用服務!(很重要哦)

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8888/eureka/
server:
  port: 8762
spring:
  application:
    name: server-member

 

pom.xml  SpringCloud與SpringBoot的包依賴

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>springcloud</groupId>
    <artifactId>server-member</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>server-member Maven Webapp</name>
    <url>http://maven.apache.org</url>
    
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.3.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.7</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.objenesis</groupId>
            <artifactId>objenesis</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.RC1</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>
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    
</project>

 

啟動項目 (這個項目啟動前需要先啟動 eureka-server項目)

運行MemberApp.java ,Run as  --- >>   Java Application

啟動成功后,在瀏覽器訪問:  http://localhost:8762/getMember

訪問結果如下圖所示:

同時再次訪問服務注冊中心 eureka-server項目,會出現如下結果,Instance下廚多出一行服務

 

 

 

 

(3)maven項目 server-order  服務消費方(類似dubbo的customer)

項目目錄結構如下: 需要編寫的文件有五個(OrderController.java  OrderService.java  OrderApp.java  application.yml  pom.xml

 

OrderService.java 服務消費方的業務類,在這里調用服務提供方的服務

RestTemplate 是框架中定義的rest服務調用

restTemplate.getForObject("http://server-member/getMember", List.class);  這是調用服務名為 server-member的服務中的 getMember請求對應的方法 (這里與上一個maven項目server-member項目中的配置相對應)

 

package springcloud.server_order.demo.service;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class OrderService {
    
    @Autowired
    private RestTemplate restTemplate;
    
    /**
     * http: 這里是寫member-server里面的訪問路徑。 getMember是訪問方法 
     * @return
     */
    public List<String> getAllUser(){
        return restTemplate.getForObject("http://server-member/getMember", List.class);
    }

}

 

OrderController.java   服務消費者的前端控制類

使用@Autowired注解 注入業務層對象,調用業務層方法

package springcloud.server_order.demo.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import springcloud.server_order.demo.service.OrderService;

@RestController
public class OrderController {

    @Autowired
    private OrderService orderService;
    
    @RequestMapping("/getOrderUser")
    public List<String> getAllUser(){
        System.out.println("訂單服務正在測試會議服務");
        return orderService.getAllUser();
    }
}

 

OrderApp.java  項目的SpringBoot啟動類

@EnableEurekaClient 標識這是一個服務client,需要注冊到 Eureka注冊中心

@LoadBalanced 標識服務的調用,需要用到負載均衡

package springcloud.server_order.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
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
@EnableEurekaClient
public class OrderApp {

    public static void main(String[] args){
        SpringApplication.run(OrderApp.class, args);
    }
    
    /**
     * 表示支持負載均衡
     * @return
     */
    @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        return new RestTemplate();
    }

}

 

application.yml  Springcloud的配置文件

eureka.client.serviceUrl.defaultZone   注冊中心的地址

server.port  訪問服務的端口

spring.application.name 服務名稱

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8888/eureka/
server:
  port: 8764
spring:
  application:
    name: server-order

 

pom.xml  項目的包依賴(SpringBoot與SpringCloud)

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>springcloud</groupId>
    <artifactId>server-order</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>server-order Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.objenesis</groupId>
            <artifactId>objenesis</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.RC1</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>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
</project>

 

啟動項目(啟動這個項目之前需要先啟動 eureka-server    server-member)

運行OrderApp.java ,Run as  --- >>   Java Application

啟動成功后,在瀏覽器訪問:  http://localhost:8764/getOrderUser

訪問結果如下圖所示:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM