当采用微服务架构时,各个业务流程被逐一分解,虽说是分解,但还是要进行连接的,最简单的就是使用http请求,将他们联系起来,通过给容器注入restTemplate,然后使用内置的方法进行请求,但是在请求过程中,难免就会涉及请求地址,请求路径之类,而这些变量是会随之改变的,也就是常说的硬编码,要改就要整个路劲都改了。而通过使用我们的eureka就可以解决这类,问题:

        在eureka中,不是根据项目的路径进行寻找,而是通过在yaml文件中定义的项目名称,一个名称可以对应多个项目,使用负载均衡算法,可以优化对同名项目的调用情况。使用eureka的流程首先就是对各个流程服务进行注册,当需要哪个服务时,就指明目标项目名称,来我们的eureka里面拿。由eureka统一管理,这样就可以减少硬编码带来的不便。使用eureka也是极其简单,只需要三步:

        第一步:创建eureka服务的服务,专门用来管理所有的注册信息:

在该模块中需要导入如下pom:

org.springframework.cloud

spring-cloud-starter-netflix-eureka-server

然后在其启动类中,需要加入如下注解(@EnableEurekaServer),就可以开启eureka服务,注意此处是服务端!

@EnableEurekaServer

@SpringBootApplication

public class EurekaApplication {

public static void main(String[] args) {

SpringApplication.run(EurekaApplication.class,args);

}

}

配置yaml文件(规定允许的端口号,项目名称,还有这个服务端的路径,供其他业务进行注册使用):

server:

port: 1008

spring:

application:

name: eurekaserver

eureka:

client:

service-url:

defaultZone: http://127.0.0.1:1008/eureka

        第二步,对需要由eureka管理的服务导入如下pom,注意此处的服务为客户端,需要使用eureka来管理自己的服务:

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

配置客户端的yaml文件(给项目起名,还有注册的路径):

spring:

application:

name: orderserver

eureka:

client:

service-url:

defaultZone: http://127.0.0.1:10086/eureka

        第三步,也就是客户端通过eureka拉取其他客户端的数据,此处使用向eureka发送http请求,不需要通过路径而是通过项目名称进行访问。以下是在service层的示例代码:

public Order queryOrderById(Long orderId) {

// 1.查询订单

Order order = orderMapper.findById(orderId);

//以下的http后跟着项目的名称即可访问

String url = "http://userserver/user/" + order.getUserId();

User user = restTemplate.getForObject(url,User.class);

order.setUser(user);

// 4.返回

return order;

}

如此下来便可以通过eureka完成微服务架构间的联系了!

效果如下(所有在线的服务都会在最下方位置出现,同名服务采用负载均衡调整被调用):

 

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: