Eureca Ribbon分布负载均衡的helloworld例子
马克-to-win @马克java社区:本节我们还是拿第一节helloworld的例子,稍加改进,即可。思路就是把provider在两个不同的端口,甚至不同的机器上,分别运行。而consumer上加上Ribbon特性即可。(参考我的项目目录:ribbon)
马克- to-win:马克 java社区:防盗版实名手机尾号: 73203。
1)在provider的代码上加上一句:System.out.println("I do");这样当consumer调用哪一个provider时,你可以知道反馈。
@RequestMapping("/acquire")
public String acquire() {
System.out.println("I do");
return "Hello 马克-to-win acquire";
}
2)运行provider时,第一次像原来一样运行。第二次运行时把端口从9090变成9092。其他都不变。
3)在consumer的项目中,加上。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
4)运行方法和第一节一样:
当我们不断用http://192.168.0.101:9000/consumer去刷新时,在两个不同的provider的console中打印出I do的机率是一样的。
附录:
1)对于eureka服务器的项目,如果你把target目录下的东西都清除了,会产生严重的错误。运行时,会报: 错误: 找不到或无法加载主类 com.EurecaServer3.App。怎么处理呢?因为class不存在了,所以没法运行。右键击pom.xml文件,run as/maven install,但会报如下错误:No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?这时, 只要重新变一下,java build path/libraries/重刷jdk1.8即可。编译完,运行以后,会报com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect,把application.yml,改动一点重新存一下即可。消费者的项目清空以后, 端口不对了:Tomcat started on port(s): 8080 (http),解决方法:把application.yml,改动一点重新存一下即可。
2)2018-11-22 15:07:36.623 ERROR 12964 --- [ver-bootstrap-0] c.netflix.discovery.TimedSupervisorTask : task supervisor rejected the task。这个错误并不影响运行,解决方法:
eureka-client1.4版本原因,换成D版本可以解决,D版本的eureka-client升级到1.6以上了
3)java运行jar命令提示没有主清单属性。WinRAR打开jar包,找到里面的MANIFEST.MF文件,加一句:Main-Class: 包.主类名