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: 包.主类名