SpringCloud-基於SpringBoot 2.1.3.RELEASE版本從零搭建分佈式框架之服務提供者(三)

上一篇

構建model實體模塊

這個模塊存儲數據庫實體對象,提供別的模塊依賴,線上項目通常是這樣的做法。構建model模塊 操作不在具體介紹。
模塊圖如下:
在這裏插入圖片描述
新建實體UserVo:

package com.spring.cloud.model;

import lombok.Data;

/**
* @ClassName UserVo
* @Description TODO
* @Author cuixhao
* @Date 2019/3/7
* @Version 1.0
**/
@Data
public class UserVo {
 private String userId;
 private String userName;
}

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">
    <parent>
        <artifactId>spring-cloud</artifactId>
        <groupId>com.spring.cloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>model</artifactId>
    <packaging>jar</packaging>
</project>

單個服務配置

新建模塊 eureka-provider,服務提供者.利用Ribbon實現。

在這裏插入圖片描述
pom.xml

    <parent>
        <artifactId>spring-cloud</artifactId>
        <groupId>com.spring.cloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>eureka-provider</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>eureka-provider</name>
    <description>服務端</description>
    <packaging>jar</packaging>


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

    <dependencies>
        <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-ribbon</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.mockito</groupId>
                    <artifactId>mockito-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.spring.cloud</groupId>
            <artifactId>model</artifactId>
            <version>1.0-SNAPSHOT</version>
        </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>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>
修改啓動類如下
package com.spring.cloud.eureka;

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;

/**
* @ClassName EurekaProviderApplication
* @Description TODO
* @Author cuixhao
* @Date 2019/3/7
* @Version 1.0
**/
@SpringBootApplication
@EnableEurekaClient
public class EurekaProviderApplication {

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

  @Bean
  @LoadBalanced
  RestTemplate restTemplate() {
      return new RestTemplate();
  }
}

注:@EnableEurekaClient 和 @EnableDiscoveryClient的區別:

  1. 這兩個都是服務發現的註解,區別是:前者是隻針對註冊中心是Eureka使用的註解,後者是兼容所有的註冊中心,例如:Zookeeper等。
編寫一個服務Rest接口
package com.spring.cloud.eureka.controller;

import com.spring.cloud.model.UserVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ClassName ClientController
 * @Description TODO
 * @Author cuixhao
 * @Date 2019/3/7
 * @Version 1.0
 **/
@RestController
@Slf4j
public class ClientController {

    @GetMapping("add")
    public UserVo service(@RequestParam String userId) {

        UserVo userVo = new UserVo();
        userVo.setUserId(userId);
        userVo.setUserName("傑克");
        log.info("執行了");
        return userVo;
    }
}

通過輸入一個userId參數,返回一個UserVo對象。
編寫application.properties文件:

# 服務名字
spring.application.name=PRODUCER-SERVICE
# 端口
server.port=7001
# 註冊中心地址,如果是集羣,那就逗號分隔
eureka.client.serviceUrl.defaultZone= \
  http://localhost:8001/eureka/
啓動項目

先啓動Eureka-Server,在啓動Eureka-Provider,訪問註冊中心:http://localhost:8001
在這裏插入圖片描述
出現如圖所示,表示服務已經註冊成功。

服務集羣配置

服務集羣配置和上一篇註冊中心集羣步驟一致。
編寫兩個服務:
application.properties

# 服務名稱
spring.application.name=PRODUCER-SERVICE
# 註冊中心地址
eureka.client.serviceUrl.defaultZone= \
  http://localhost:8001/eureka/

application-service1.properties

server.port=7001

application-service2.properties

server.port=7002

啓動命令:

java -jar eureka-provider.jar --spring.profiles.active=service1
java -jar eureka-provider.jar --spring.profiles.active=service2

訪問註冊中心:http://localhost:8001,就可以看到7001 7002 兩個端口的服務註冊成功了!

下一篇

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章