SpringCloud之Eureka
一个服务发现组件,由于SpringCloud对其支持比较好,所以使用Eureka,当然也可以使用Dubbo。
简介:
Eureka是Nexfliex开发的服务注册与发现框架,本身是一个Rest服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层故障移除的目的,SpringCloud将其集成在子项目Spring-Cloud-nexfliex中,以实现SpringCloud服务发现的功能。
废话不多说,这些介绍在官网或百度都有,就不再啰嗦了,感兴趣的同学可以自行了解。
最终达成目的:是两个或多个服务之间可以远程调用。下文将会实现movie服务通过eureka远程调用user服务
例子:
1.用于服务的注册与发现,那自然需要至少3个工程,一个用于提供eureka服务,两个用于注册与发现,以及验证结果。这里创建出3个springboot工程。
eureka用于提供eureka服务,剩下两个模拟用户远程订电影票操作
2.导入eureka依赖以及其他web工程需要的依赖,这个网上也有(注意:服务端和发现端的依赖不一样)
服务端:(eureka工程)
发现端:(user工程和movie工程)
3.
a.需要在(eureka工程)springboot启动类上加注解(表示eureka作为一个服务端)
b.修改(eureka工程)application.properties配置文件(和yaml文件是同一个,只是写法不同,yaml更倾向于面向对象)
参数分析:
server.port:更改当前tomcat端口
service-url.defaultZone:服务注册地址
修改完毕后就可以启动了,启动后在页面输入eureka地址http://localhost:8761/,访问成功
因为并没有服务注册到eureka上,所以页面application 并没有应用显示(其他的信息包括eureka服务端的参数设置以及当前机器内存,核心等等)
4.
a.需要在(user工程和movie工程)springboot启动类上加注解(表示eureka作为一个客户端)
b.修改(user工程和movie工程)application.properties配置文件
参数分析:如上图注释所示
spring.application.name:表示修改应用名
spring.application.instance_id:表示当前机器ip地址
server.port:当前服务端口
修改完毕后就可以启动了,因为eureka服务端会实时监测是否有服务注册上,所以一旦有服务注册,就会自动发现
如图所示:注册到eureka注册后,application应用处会显示当前注册的user服务工程。同理,将movie服务工程也注册上去。
5.user服务工程连接MySQL数据库,先完成调用数据
测试完毕,可以正常调用数据库
6.编写movie服务工程代码
application启动类注入RestTemplate类,需要用RestTemplate类进行远程调用(@LoadBalance注解表示Ribbon客户端的负载均衡)
@SpringBootApplication
@EnableEurekaClient
public class MicroserviceSimpleComsumerMovieApplication {
public static void main(String[] args) {
SpringApplication.run(MicroserviceSimpleComsumerMovieApplication.class, args);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
controller类
package com.miss.cloud.microservicesimplecomsumermovie.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import com.miss.cloud.microservicesimplecomsumermovie.entity.User;
/**
* movie服务通过eureka远程调用user服务
* @author Hang W
* @Date 2018-12-1 23:18:45
*
*/
@RestController
@RequestMapping("/comsumer")
public class MovieController {
@Autowired
private RestTemplate restTemplate;
// user.address=http://localhost:8443/miss/query/
@Value("${user.address}")
private String host;
@GetMapping("/query/{id}")
public User queryUserById(@PathVariable Long id) {
User user = restTemplate.getForObject(host + id, User.class);
return user;
}
}
说明:
1.使用restTemplate调用如果不进行转换,那返回的是Json,也可以,自行决定。
2.host:表示user服务的远程地址,写在application.properties配置文件中
调用movie接口,可以看到返回的user信息。调用成功
总结:
1.使用Eureka,是因为和springcould支持较好,当然服务之间调用也可以使用dubbo。(下次分享dubbo服务之间的调用)
2.完全得力于springboot的便捷,使我们使用spring完全都可以不用写xml,实在非常方便。
3.好久好久好久没写过博客了,,,,,