@SpringBootApplication
@EnableDiscoveryClient
public class OrderApplication {
QLoadBalanced
@Bean
RestTemplate restTemplate() (
return new RestTemplate() ;
public static void main (Stringl] args)1
new
SpringApplicationBuilder (OrderApplication.class) .web(true) .run (args);
}
//…
}
以下是当前的配置文件。可以使用spring, application.name属性来设置服务的名称。
spring:
application:
name: order-service
server:
port: ${PORT:8090}
eureka:
client:
serviceUrl:
defaultZone: $(EUREKA URL:http://localhost:8761/eureka/}
这里的设置和以前是一样的。我们还启动了所有的微服务。但是,这一次account-service服务和product-service服务的实例数将乘以2。启动每个服务的第二个实例时,可以使用-DPORT或-Dserver.port参数覆盖默认服务器端口,如java -jar -DPORT-9093product- srvice-1.0-SNAPSHOTjar.所有实例都已在Eureka 服务器中注册,这可以使用其UI仪表板轻松查看,如图6.2所示。
这是本书第一次看到负载均衡的实际示例。默认情况下,Ribbon 客户端将在微服务的所有已注册实例之间平均分配流量。该算法称为轮询调度(Round Robin)。实际上,这意味着客户端会记住它转发的最后一个请求的位置,然后将当前请求发送到该行中的下一个服务。这个方法可能会被本书第7章所介绍的其他规则覆盖。通过在ribbon.listOfServers中设置以逗号分隔的服务地址列表,也可以为没有服务发现机制的前一个示例配置负载平衡,如
ribon.listOfServers-localhost:8093,localhost:9093. 回到本示例应用程序,order-service 服务发送的请求将在account-service服务和product-service 服务的两个实例之间进行负载均衡。这和customer- service服务是相似的,只不过后者是在account-service服务的两个实例之间分配流量。如果开发人员已经启动了如图6.2所示的Eureka仪表板上的所有服务实例,并将一些测试请 求发送到order-service服务,则肯定会看到以下日志。在该日志中,我们以加粗形式突出显示了某些片段,它们是Ribbon客户端显示的为目标服务找到的地址列表。