zoukankan      html  css  js  c++  java
  • Spring Boot 实践3 --基于spring cloud 实现微服务的简单调用

    背景:spring boot主张微服务,所以这里不得不提出服务之间的调用

       这次我们使用srping cloud作为服务集成与管理者

     (转载请注明来源:cnblogs coder-fang)

    1. 根据实践1,创建一个spring boot 项目(springServer),作为服务中心:
    2. springServer的pom文件如下:
      <?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>com.test</groupId>
          <artifactId>springbootService</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <packaging>jar</packaging>
      
          <name>springmvcTest-1</name>
          <description>Demo project for Spring Boot</description>
      
          <parent>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-parent</artifactId>
              <version>1.5.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.8</java.version>
              
          </properties>
      
          <dependencies>
          
              <dependency>
              
                  <groupId>org.springframework.cloud</groupId> 
                  <artifactId>spring-cloud-starter-eureka-server</artifactId>            
              </dependency>
      
          </dependencies>
          
          <dependencyManagement>
          <dependencies>
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-dependencies</artifactId>
                  <version>Camden.SR7</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-snapshots</id>
                  <name>Spring Snapshots</name>
                  <url>https://repo.spring.io/libs-snapshot</url>
                  <snapshots>
                      <enabled>true</enabled>
                  </snapshots>
              </repository>
              <repository>
                  <id>spring-milestones</id>
                  <name>Spring Milestones</name>
                  <url>https://repo.spring.io/milestone</url>
                  <snapshots>
                      <enabled>false</enabled>
                  </snapshots>
              </repository>
          </repositories>
      
          <pluginRepositories>
              <pluginRepository>
                  <id>spring-snapshots</id>
                  <name>Spring Snapshots</name>
                  <url>https://repo.spring.io/snapshot</url>
                  <snapshots>
                      <enabled>true</enabled>
                  </snapshots>
              </pluginRepository>
              <pluginRepository>
                  <id>spring-milestones</id>
                  <name>Spring Milestones</name>
                  <url>https://repo.spring.io/milestone</url>
                  <snapshots>
                      <enabled>false</enabled>
                  </snapshots>
              </pluginRepository>
          </pluginRepositories>
      
      
      </project>
      View Code
    3. springServer的application.properties配置如下:
      server.port=8000
      eureka.instance.hostname=0.0.0.0
      eureka.client.register-with-eureka=false
      eureka.client.fetch-registry=false
      eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka

      设置服务中心的端口为8000,eureka.client.register-with-eureka=false,eureka.client.fetch-registry=false,这两个是禁止自己注册到服务中心,

      eureka.client.serviceUrl.defaultZone 这个参数是指定客服端调用的服务地址。
    4. 在ServiceApplication中使用@EnableEurekaServer启用服务中心:
      package com.springdemo;
      
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      import org.springframework.boot.builder.SpringApplicationBuilder;
      import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
      
      
      @EnableEurekaServer
      @SpringBootApplication
      public class ServiceApplication {
      
          public static void main(String[] args) {
              new SpringApplicationBuilder(ServiceApplication.class).run(args);
          }
      }
      View Code
    5. 运行Spring server,在浏览器输入 http://localhost:8000/ 进入服务中心页面,此时页面中application为空,暂时无服务注册:

    6. 修改springmvcTest项目,即实践1中创建的项目,使其支持spring cloud eureka。
      1.   pom中加入依赖:
        <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
                </dependency>
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Camden.SR7</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
      2. application.properties中加入 
        #for eureka
        spring.application.name=db-service
        eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
        eureka.client.serviceUrl.defaultZone是上述spring server项目的地址,
        spring.application.name 是本项目在服务中心的名称,用于其它服务访问本服务
         
      3. 在SpringmvcTestApplication中加入注解@EnableDiscoveryClient 将自己注册到服务中心:
        @EnableDiscoveryClient
        @SpringBootApplication
        @ServletComponentScan
        public class SpringmvcTestApplication {
        
            public static void main(String[] args) {
                SpringApplication.run(SpringmvcTestApplication.class, args);
                
            }
        }
      4. 运行springmvcTest ,观察服务注册中心页面,此时application中已有我们注册的服务:
      5. 此时 springmvcTest中的restful接口,已可以被服务中心的其它服务调用。
    7.  创建服务消费者,使其能够调用springmvcTest项目中的restful服务:
      1.   根据实践1 方式创建项目(springClient),pom文件如下:
        <?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>com.test</groupId>
            <artifactId>springClient</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <packaging>jar</packaging>
        
            <name>springmvcTest-1</name>
            <description>Demo project for Spring Boot</description>
        
            <parent>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>1.5.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.8</java.version>
                
            </properties>
        
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter</artifactId>
                </dependency>
        
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-test</artifactId>
                    <scope>test</scope>
                </dependency>
                
                <!-- Eureka -->
                <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-eureka</artifactId>
                </dependency>
            </dependencies>
                <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Camden.SR7</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-snapshots</id>
                    <name>Spring Snapshots</name>
                    <url>https://repo.spring.io/snapshot</url>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
                <repository>
                    <id>spring-milestones</id>
                    <name>Spring Milestones</name>
                    <url>https://repo.spring.io/milestone</url>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </repository>
            </repositories>
        
            <pluginRepositories>
                <pluginRepository>
                    <id>spring-snapshots</id>
                    <name>Spring Snapshots</name>
                    <url>https://repo.spring.io/snapshot</url>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </pluginRepository>
                <pluginRepository>
                    <id>spring-milestones</id>
                    <name>Spring Milestones</name>
                    <url>https://repo.spring.io/milestone</url>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
        
        
        </project>
        View Code
      2. application.properties中加入:
        spring.application.name=client
        eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
      3. 项目入口application代码如下:
        package com.test.demo;
        
        import org.springframework.boot.SpringApplication;
        import org.springframework.boot.autoconfigure.SpringBootApplication;
        import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
        import org.springframework.cloud.client.loadbalancer.LoadBalanced;
        import org.springframework.context.ConfigurableApplicationContext;
        import org.springframework.context.annotation.Bean;
        import org.springframework.http.HttpEntity;
        import org.springframework.http.HttpHeaders;
        import org.springframework.http.HttpMethod;
        import org.springframework.http.ResponseEntity;
        import org.springframework.web.client.RestTemplate;
        
        
        
        @EnableDiscoveryClient
        @SpringBootApplication
        public class SpringBootClientApp {
            
        
            @Bean
            @LoadBalanced
            RestTemplate restTemplate() {
                return new RestTemplate();
            }
            public static void main(String[] args) {
                ConfigurableApplicationContext ctx = SpringApplication.run(SpringBootClientApp.class, args);
                
                RestTemplate restTemp = ctx.getBean(RestTemplate.class);
                
                String val=restTemp.getForEntity("http://db-service/user/zh", String.class).getBody();
                
                System.out.println("getVal="+val);
                
            }
        }

        首先注入一个 restTemplate用来调用远程rest服务

      4. 运行client,且关键输出如下:

      到这里远程服务调用已基本完成

  • 相关阅读:
    Java中的4种代码块
    Java enum(枚举)的用法详解(转)
    Java 可变参数列表
    SQL Server 查询处理中的各个阶段(SQL执行顺序)
    SQL Server 数据查询 整理
    MYSQL常用命令
    SQL的主键和外键约束(转)
    Servlet工作原理(转)
    servlet、genericservlet、httpservlet之间的区别(转)
    关于MyEcplise中常见的问题和解决方案
  • 原文地址:https://www.cnblogs.com/coder-fang/p/7791579.html
Copyright © 2011-2022 走看看