33人参与 • 2024-07-28 • Java
假如我们的服务提供者user-service部署了多个实例,如图:
大家思考几个问题:
这些问题都需要利用springcloud中的注册中心来解决,其中最广为人知的注册中心就是eureka,其结构如下:
回答之前的各个问题。
问题1:order-service如何得知user-service实例地址?
获取地址信息的流程如下:
问题2:order-service如何从多个user-service实例中选择具体的实例?
问题3:order-service如何得知某个user-service实例是否依然健康,是不是已经宕机?
因此,接下来我们动手实践的步骤包括:
首先大家注册中心服务端:eureka-server,这必须是一个独立的微服务
在cloud-demo父工程下,创建一个子模块:
填写模块信息:
然后填写服务信息:
引入springcloud为eureka提供的starter依赖:
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-starter-netflix-eureka-server</artifactid>
</dependency>
给eureka-server服务编写一个启动类,一定要添加一个@enableeurekaserver注解,开启eureka的注册中心功能:
package cn.itcast.eureka;
import org.springframework.boot.springapplication;
import org.springframework.boot.autoconfigure.springbootapplication;
import org.springframework.cloud.netflix.eureka.server.enableeurekaserver;
@springbootapplication
@enableeurekaserver
public class eurekaapplication {
public static void main(string[] args) {
springapplication.run(eurekaapplication.class, args);
}
}
编写一个application.yml文件,内容如下:
server:
port: 10086
spring:
application:
name: eureka-server
eureka:
client:
service-url:
defaultzone: http://127.0.0.1:10086/eureka
启动微服务,然后在浏览器访问:http://127.0.0.1:10086
看到下面结果应该是成功了:
下面,我们将user-service注册到eureka-server中去。
在user-service的pom文件中,引入下面的eureka-client依赖:
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-starter-netflix-eureka-client</artifactid>
</dependency>
在user-service中,修改application.yml文件,添加服务名称、eureka地址:
spring:
application:
name: userservice
eureka:
client:
service-url:
defaultzone: http://127.0.0.1:10086/eureka
为了演示一个服务有多个实例的场景,我们添加一个springboot的启动配置,再启动一个user-service。
首先,复制原来的user-service启动配置:
然后,在弹出的窗口中,填写信息:
现在,springboot窗口会出现两个user-service启动配置:
不过,第一个是8081端口,第二个是8082端口。
启动两个user-service实例:
查看eureka-server管理页面:
下面,我们将order-service的逻辑修改:向eureka-server拉取user-service的信息,实现服务发现。
之前说过,服务发现、服务注册统一都封装在eureka-client依赖,因此这一步与服务注册时一致。
在order-service的pom文件中,引入下面的eureka-client依赖:
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-starter-netflix-eureka-client</artifactid>
</dependency>
服务发现也需要知道eureka地址,因此第二步与服务注册一致,都是配置eureka信息:
在order-service中,修改application.yml文件,添加服务名称、eureka地址:
spring:
application:
name: orderservice
eureka:
client:
service-url:
defaultzone: http://127.0.0.1:10086/eureka
最后,我们要去eureka-server中拉取user-service服务的实例列表,并且实现负载均衡。
不过这些动作不用我们去做,只需要添加一些注解即可。
在order-service的orderapplication中,给resttemplate这个bean添加一个@loadbalanced注解:
修改order-service服务中的cn.itcast.order.service包下的orderservice类中的queryorderbyid方法。修改访问的url路径,用服务名代替ip、端口:
spring会自动帮助我们从eureka-server端,根据userservice这个服务名称,获取实例列表,而后完成负载均衡。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论