zoukankan      html  css  js  c++  java
  • Spring Cloud开发实践

    服务注册 EurekaServer

    Eureka服务模块只有三个文件, 分别是pom.xml, application.yml 和 EurekaServerApplication.java, 内容如下

    pom.xml

    spring-boot-maven-plugin: 使用 goal=repackage 可以打包出一个包含所有依赖的fat jar
    maven-deploy-plugin: skip=true 表示当执行deploy时, 这个模块不会被提交到maven的repository

    <?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>
    
        <parent>
            <groupId>com.rockbb</groupId>
            <artifactId>scot</artifactId>
            <version>1.0-SNAPSHOT</version>
            <relativePath>../scot/pom.xml</relativePath>
        </parent>
        <artifactId>scot-eureka</artifactId>
        <packaging>jar</packaging>
        <name>Scot: Eureka Server</name>
    
        <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-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <finalName>scot-eureka</finalName>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <configuration>
                        <skip>true</skip>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>

    application.yml

    将自己配置为 Eureka Server

    server:  
      port: ${PORT:8761}
        
    eureka:  
      instance:
        hostname: localhost
      client:
        registerWithEureka: false
        fetchRegistry: false
      server:
        enableSelfPreservation: true
        renewalPercentThreshold: 0.1

    EurekaServerApplication.java

    @EnableEurekaServer
    @SpringBootApplication
    public class EurekaserverApplication {
        public static void main(String[] args) {
            SpringApplication.run(EurekaserverApplication.class, args);
    	}
    }
    

    .

    接口定义 Commons API

    scot-commons-api模块定义了服务的接口Service和参数类型DTO. 因为Spring Cloud的特殊性, 这里的Service定义使用了@FeignClient和@RequestMapping注解, 这样在被下游调用时, 可以通过 @EnableFeignClients(basePackages = {"com.rockbb.scot.commons.api"}) 很方便地将服务引入.

    本模块只有三个文件, pom.xml, UserDTO.java, UserDTOService.java

    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>
    
        <parent>
            <groupId>com.rockbb</groupId>
            <artifactId>scot</artifactId>
            <version>1.0-SNAPSHOT</version>
            <relativePath>../scot/pom.xml</relativePath>
        </parent>
        <artifactId>scot-commons-api</artifactId>
        <packaging>jar</packaging>
        <name>Scot: Commons API</name>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
            <dependency>
                <groupId>com.rockbb</groupId>
                <artifactId>scot-commons-lib</artifactId>
                <version>${project.version}</version>
            </dependency>
        </dependencies>
    </project>

    UserDTO.java

    注意如果要添加带参数的 constructor, 一定要把无参的constructor也加上, 否则下游无法将对象反序列化.

    public class UserDTO implements Serializable {
        private String id;
        private String name;
    
        public UserDTO initialize(String id, String name) {
            this.id = id;
            this.name = name;
            return this;
        }
    
        public String getId() { return id; }
        public void setId(String id) { this.id = id; }
    
        public String getName() { return name; }
        public void setName(String name) { this.name = name; }
    }
    

    UserDTOService.java

    • @FeignClient 的value, 来自于 scot-commons-impl 模块的 spring.application.name, 多个DTOService可以使用相同的value.
    • @RequestParam 一定要添加 value = "xx" , 否则在调用中即使你指定了method=GET, feign依然会使用POST进行调用, 导致错误
    • @RequestMapping 可以像Controller一样同时定义于class和method
    @FeignClient(value = "scot-commons")
    @RequestMapping(value = "/user")
    public interface UserDTOService {
    
        @RequestMapping(value = "/diagnos", method = RequestMethod.GET)
        String diagnos(@RequestParam(value = "name") String name);
    
        @RequestMapping(value = "/get", method = RequestMethod.GET)
        UserDTO get(@RequestParam(value = "id") String id);
    
        @RequestMapping(value = "/list", method = RequestMethod.GET)
        List<UserDTO> list();
    
        @RequestMapping(value = "/count", method = RequestMethod.GET)
        long count();
    }
    

    .

  • 相关阅读:
    进入用友通:提示"由于文件不可访问,内存磁盘空间不足无法打开ufsystem数据库"...
    HDOJ 1069 Monkey and Banana
    HDOJ 1087 Super Jumping! Jumping! Jumping!
    HDOJ 1209 Clock
    CodeForces Round #185 (Div. 2)A,B,C
    HDOJ 1465 不容易系列之一
    HDOJ 1114 PiggyBank
    HDOJ 1280 前m大的数
    HDOJ 1495 非常可乐
    HDOJ 1284 钱币兑换问题
  • 原文地址:https://www.cnblogs.com/milton/p/9853458.html
Copyright © 2011-2022 走看看