本节主要介绍:实现服务注册、查找、负载功能

参考学习:

https://www.cnblogs.com/lenve/p/7985943.html

https://segmentfault.com/blog/spring-cloud

https://www.cnblogs.com/haly/category/1447424.html

一、注册Service服务(Restful服务)

1、创建springboot的maven工程,添加pom.xml依赖

<dependencies>
         <!-- springcloud-eureka -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.3.4.RELEASE</version>
        </dependency>
        <!-- 指定导入jackson包版本,避免eureka和boot冲突 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.8.8</version>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-parent</artifactId>
                <version>Brixton.SR5</version>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>

2、application.properties中追加eureka参数定义 

# eureka
# 服务注册名
spring.application.name=TEST-SERVICE
# 服务中心注册地址 即找到当前服务中心的地址,把当前的项目以TEST-SERVICE的名字注册上去
eureka.client.serviceUrl.defaultZone=http://localhost:7777/eureka

3、 主启动类,使用@EnableDiscoveryClient/服务注册和查找
@EnableDiscoveryClient //服务注册和查找
@SpringBootApplication
@MapperScan(basePackages={"cn.crk.dao"})
@ServletComponentScan
public class CourseBootApplication {

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

    }

}

4、启动应用,访问http://localhost:7777/,出现如下页面,则服务注册成功。

     先启动Eureka服务中心项目,然后启动服务项目。

springCloud微服务(二)

二、SpringCloud服务调用

调用有2中两种方式:
一种是RestTemplate模式,一种是Feign接口对象模式 。

创建一个springboot的maven工程作为调用工程。

1、RestTemplate模式(ribbon实现负载均衡)

a. pom.xml添加eureka、ribbon依赖

<!-- ribbon -->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-eureka</artifactId>
  <version>1.3.4.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-ribbon</artifactId>
  <version>1.3.4.RELEASE</version>
</dependency>

<dependencyManagement>
    <dependencies>
        <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-parent</artifactId>
          <version>Brixton.SR5</version>
          <type>pom</type>
        </dependency>
    </dependencies>
</dependencyManagement>

b.application.properties中追加eureka参数定义 

# eureka
# 当前的项目是否要作为一个服务注册到容器中
eureka.client.registerWithEureka=false
# 当前的服务工程是否要作为一个服务调用者
eureka.client.fetchRegistry=true
#服务中心
eureka.client.serviceUrl.defaultZone=http://localhost:7777/eureka 

c.创建RestTemplate对象,追加@LoadBalanced,启用ribbon负载功能

 /**
 * 配置RestTemplate模式
 * */
@Configuration
public class RestTemplateConfiguration {    
    @Bean
    @LoadBalanced // 追加ribbon负载功能
    public RestTemplate createRestTemplate() {
        return new RestTemplate();
    }
}

 d.注入RestTemplate对象,利用服务名调用Restful服务

    @Autowired
    private RestTemplate template;

    // 调用註冊Restful服务
    @ResponseBody
    @RequestMapping(value = "/restTemplate", method = RequestMethod.GET)
    public ResponseResult loadDirections() {
        // url规则: http://注册服务名/请求名
        ResponseResult result = template.getForObject("http://TEST-SERVICE/direction", ResponseResult.class);
        return result;
    }

e. 在主启动类前,追加@EnableDiscoveryClient
@EnableDiscoveryClient //启用服务注册和查找
@SpringBootApplication
public class StudyWebBootApplication {

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

}
f. 启动应用,测试服务接口 http://localhost:9001/study/restTemplate.do 

2、Feign接口对象模式

a. 在之前的pom.xml中追加

  <!-- feign调用 -->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-feign</artifactId>
      <version>1.3.4.RELEASE</version>
    </dependency> 

b.同上

c. 定义远程Feign接口,追加@FeignClient标记

/**
 * 配置Feign模式
 * */
@FeignClient(name="TEST-SERVICE") //指定注册服务名
public interface TestRemote {

    //调用註冊Restful服务請求名
    @RequestMapping(value="/direction",method=RequestMethod.GET)
    public ResponseResult loadDirections();
    
}

d.注入Feign接口对象调用远程服务

    @Autowired
    private TestRemote testRemote;

    // 调用註冊Restful服务
    @ResponseBody
    @RequestMapping(value = "/feign", method = RequestMethod.GET)
    public ResponseResult loadDirections2() {
        //利用Feign接口对象方法调用远程服务
        ResponseResult result = testRemote.loadDirections();
        return result;
    }

e.在主启动类前追加@EnableFeignClients和@EnableDiscoveryClient标记

//启用Feign接口模式调用服务
@EnableFeignClients
//启用服务注册和查找
@EnableDiscoveryClient
@SpringBootApplication
public class StudyWebBootApplication {

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

}

f.启动应用,测试接口,同上

相关文章: