004 SpringCloud-consumer服务的消费者

1.创建消费者:配置pom

<parent>
    <groupId>com.cc</groupId>
    <artifactId>spring-cloud-matser</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>spring-cloud-01-eureka-consumer</artifactId>
  <name>spring-cloud-01-eureka-provider</name>
  <description>spring-cloud-01-eureka-consumer</description>

  <dependencies>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <!-- 标示这个工程是一个服务,需要引入此jar -->
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
      </dependency>
      <!-- 动态刷新的一个模块jar -->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-actuator</artifactId>
      </dependency>
      
  </dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Edgware.SR4</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<build>
    <finalName>spring-cloud-01-eureka-consumer</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>com.cc.springcloud.Application</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

2.配置application.properties

spring.application.name=consumer-service
##微服务方式尽量不要加server.context-path,只用名字加方法实现
#server.context-path=/consumer
server.port=7002

##需要引入eureka注册中心的地址
##下面两条配置代表注册到注册中心后显示自己的IP地址,实际工作中尽量加上
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.application.name}:${spring.cloud.client.ipAddress}:${server.port}

##租期到期时间间隔
#eureka.instance.lease-expiration-duration-in-seconds=30
##租期更新时间间隔
#eureka.instance.lease-renewal-interval-in-seconds=10

##开启健康检查,必须要引入spring-boot-starter-actuator动态刷新jar
eureka.client.healthcheck.enabled=true

eureka.client.service-url.defaultZone=http://eureka1:8001/eureka

3.构建Controller:

package com.cc.springcloud.api;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class ConsumerController {
    
    @Autowired
    private RestTemplate restTemplate;
    
    
    @RequestMapping(value="/getByUrl")
    public String getByUrl() {
        //需要创建一个普通的RestTemplate
        RestTemplate rt1 = new RestTemplate();
        //基于http的服务之间调用,并没有依赖于service,注册中心的目的是要基于service依赖调用
        ResponseEntity<String> responseEntity = rt1.getForEntity("http://localhost:7001/index", String.class);
        String ret = responseEntity.getBody();
        System.out.println("返回provider服务调用结果"+ret);
        return "---------get by getByUrl----------";
    }
    
    /**
     *  下面的getByServiceName() 获取不的provider-service服务,
     *  原因在于:普通的RestTemplate并不具备服务发现功能;
     * 需要在RestTemplate创建的时候添加@LoadBalanced注解
     */
    @RequestMapping(value="/getByServiceName")
    public String getByServiceName() {
        ResponseEntity<String> responseEntity = restTemplate.getForEntity("http://provider-service/index", String.class);
        String ret = responseEntity.getBody();
        System.out.println("返回provider服务调用结果"+ret);
        return "---------get by service name----------";
    }

}
 

4.构建Application:

package com.cc.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@EnableDiscoveryClient   //标示是一个具体的服务,需要向注册中心注册
@SpringBootApplication   //springboot 核心配置
@EnableAutoConfiguration //应用RestTemplate必须要加
public class Application {

    //springcloud新版本需要new一个RestTemplate,才能在ConsumerController中注入成功,否则异常找不到类
    @Bean
    @LoadBalanced  //负载均衡机制
    /**
     * 加入@LoadBalanced后getByUrl()方法将失效,
     * 原因在于注释启动了微服务特性服务发现,会将方法中的url地址当成服务名称,所有找不到,
     * 所以getByUrl()方法需要自己创建一个普通的RestTemplate;
     * 
     * 服务发现的内部机制是LoadBalanced拉取服务列表,
     * 然后在和请求做匹配,最后完成服务发现功能;
     */
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
    
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
 

5.启动server、provider、consumer:

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值