SpringCloud四:Ribbon+Rest服务消费者

 

简介

SpringCloudRibbon是Netflix下的一个开源项目,是基于NetflixRibbon实现的,主要作用是基于HTTP和TCP为客户端做负载均衡,其默认是采用的轮询方式进行负载均衡,通过SpringCloud进行封装后可以非常方便的进行Rest请求。

为了测试ribbon的负载均衡我们可以再创建一个eureka-service1,也可以在idea中设置启动多实例,修改一下端口号为8763,这样就相当于一个集群了。

接下来就是创建ribbon

1.首先创建一个名称为ribbon的springboot项目再在properties中加入相关配置

spring.application.name=client-ribbon

server.port=8764

eureka.client.serviceUrl.defaultZone=http://user:pwd@localhost:8761/eureka/

#实例改为IP显示,默认false
eureka.instance.prefer-ip-address=true

#自定义注册中心服务实例显示格式
#默认是${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}
eureka.instance.instance-id=${spring.application.name}:${server.port}

2.加入对应的pom文件

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

在spring-cloud-starter-netflix-eureka-client JAR里已经包含了我们所需要的Ribbon了,所以就不用重复添加了

3.在SpringBoot的启动类上加上@EnableEurekaClient注解,向注册中心进行注册,再注入一个Bean restTemplate,并加上@LoadBalanced注解,给与了restTemplate负载均衡的功能。

//可以是其他的注册中心 如:zookeeper,
//@EnableDiscoveryClient
//注册中心必须是eureka
@EnableEurekaClient
@SpringBootApplication
public class RibbonApplication {

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

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

4.写一个测试service,用restTemplate来消费eureka-service,这里一定要用服务ID不能用IP+端口号来进行调用

@Service
public class RibbonService {

    @Autowired
    private RestTemplate restTemplate;


    public String ribbon(String name) {
        //必须使用服务名称,不能使用IP:端口号
        String address="http://eureka-service/find;
      return   restTemplate.getForObject(address,String.class);
    }
}

再写一个Controller对Service进行调用

@Slf4j
@RestController
public class RibbonController {

    @Autowired
    private RibbonService ribbonService;


    @RequestMapping(value = "find", method = RequestMethod.GET)
    public String ribbon() {
        String result = ribbonService.ribbon();
        log.info("返回结果:{}", result);
        return result;
    }

}

在浏览器中输入http://localhost:8764/find,多请求几次,会发现ribbon是对eureka-service是进行交替消费的

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