SpringCloud:ribbon项目搭建(Gradle项目)

我们在前面创建了EreukaClient ,注解为@EnableEurekaClient

现在我们将这个client引入ribbon变成负载均衡,首先对比一个新的注解:@EnableDiscoveryClient

关于两者的区别:

SpringCLoud中的“Discovery Service”有多种实现,比如:eureka, consul, zookeeper。

1,@EnableDiscoveryClient注解是基于spring-cloud-commons依赖,并且在classpath中实现; 

2,@EnableEurekaClient注解是基于spring-cloud-netflix依赖,只能为eureka作用;

如果你的classpath中添加了eureka,则它们的作用是一样的。

 

其实用更简单的话来说,就是如果选用的注册中心是eureka,那么就推荐@EnableEurekaClient,如果是其他的注册中心,那么推荐使用@EnableDiscoveryClient。

 

为了让它变成负载均衡,先创建一个兄弟服务。两者端口号,分别为8762和8763,并拥有同一个应用名称:cloud-service。

eureka:
    client:
        serviceUrl:
            defaultZone: http://localhost:8761/eureka/
server:
    port: 8762
spring:
    application:
        name: cloud-service

两者都提供一个请求接口,返回的字符串显示各自的端口号。

@RestController
	@RequestMapping(value = "/ribbon")
	public class RibbonTestApi {
		/*
		 * @return 相关信息
		 */
		@RequestMapping(value = "name", method = RequestMethod.GET)
		public String getMyNameApi() {
			return "111111111111111"+"该服务器端口号:8762"; // or 8763
		}
	}

  

Another Client:8092

 接下来创建一个服务端,调用这个/ribbon/name请求。

@SpringBootApplication
@EnableDiscoveryClient
public class CloudRibbonApplication {

	private static final Logger logger  = LogManager.getLogger(CloudRibbonApplication.class.getName());

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


	/**
	 * Spring提供的用于访问Rest服务的客户端
	 * @return
	 */
	@Bean
	@LoadBalanced
	RestTemplate restTemplate() {
		logger.info("LoadBalanced restTemplate from ribbon client");
		return new RestTemplate();
	}
}

  

创建一个TestRibbonApi类:

@RestController
@RequestMapping(value = "/test")
public class TestRibbonApi {
    /**
     * 注入RestTemplate
     */
    @Autowired
    RestTemplate restTemplate;

    @RequestMapping(value = "/name" ,method = RequestMethod.GET)
    public String testGetNameOfService(){
        String url="http://CLOUD-SERVICE/ribbon/name";
        return restTemplate.getForObject(url,String.class);
    }
}

  

 将它们分别启动可以看到:

 

访问8092这台服务器的端口可以看到

刷新一下:

1.第一次使用服务器名调用。 

http://CLOUD-SERVICE/ribbon/name

2.ribbon没有特殊的gradle或maven包引入。没有spring-cloud-starter-ribbon这样子的引入,和普通client一样。重点全在 RestTemplate类 和 @LoadBalanced

RestTemplate是Spring提供的用于访问Rest服务的客户端。RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。
调用RestTemplate的默认构造函数,RestTemplate对象在底层通过使用java.net包下的实现创建HTTP 请求,可以通过使用ClientHttpRequestFactory指定不同的HTTP请求方式。

ClientHttpRequestFactory接口主要提供了两种实现方式,一种是SimpleClientHttpRequestFactory,
使用J2SE提供的方式(既java.net包提供的方式)创建底层的Http请求连接,
还有一种方式是使用HttpComponentsClientHttpRequestFactory方式,
底层使用HttpClient访问远程的Http服务,使用HttpClient可以配置连接池和证书等信息。

@LoadBalanced 注解加在RestTemplate上面,这个注解会自动构造LoadBalancerClient接口的实现类并注册到Spring容器中。
posted @ 2019-01-28 15:13  临兵斗者  阅读(873)  评论(0编辑  收藏  举报