什么是微服务?
微服务就是把原本臃肿的一个项目的所有模块拆分开来并做到互相没有关联,甚至可以不使用同一个数据库。 比如:项目里面有User模块和Power模块,但是User模块和Power模块并没有直接关系,仅仅只是一些数据需要交互,那么就可以吧这2个模块单独分开来,当user需要调用power的时候,power是一个服务方,但是power需要调用user的时候,user又是服务方了, 所以,他们并不在乎谁是服务方谁是调用方,他们都是2个独立的服务,这时候,微服务的概念就出来了。
微服务和分布式的区别
谈到区别,我们先简单说一下分布式是什么,所谓分布式,就是将偌大的系统划分为多个模块(这一点和微服务很像)部署到不同机器上(因为一台机器可能承受不了这么大的压力或者说一台非常好的服务器的成本可能够好几台普通的了),各个模块通过接口进行数据交互,其实 分布式也是一种微服务。 因为都是吧模块拆分开来变为独立的单元,提供接口来调用,那么 他们本质的区别在哪呢? 他们的区别主要体现在“目标”上, 何为目标,就是你这样架构项目要做到的事情。 分布式的目标是什么? 我们刚刚也看见了, 就是一台机器承受不了的,或者是成本问题 , 不得不使用多台机器来完成服务的部署, 而微服务的目标 只是让各个模块拆分开来,不会被互相影响,比如模块的升级亦或是出现BUG等等...,也可以用一句话来理解:分布式也是微服务的一种,而微服务他可以是在一台机器上。
微服务与Spring-Cloud的关系(区别)
微服务只是一种项目的架构方式,或者说是一种概念,就如同我们的MVC架构一样, 那么Spring-Cloud便是对这种技术的实现。
快速搭建Spring Cloud项目
1.创建一个新工程,选择maven,点击下一步
2.填写项目相关的信息,进到下一步
3.填写项目名和项目位置
4.该项目是作为一个Parent project存在的,src文件可以删除
添加 Eureka Server 子项目
1.在项目上右键-->new-->module-->Spring Initializr-->next
2.填写项目相关信息
3.选择Cloud Discovery
4.填写项目名和项目位置等
5.在Application类,添加@EnableEurekaServer注解
注:该注解表明标注类是一个Eureka Server
6.修改配置,切换启动端口
我是用yml application.yml
# 服务注册中心 (单节点) server: port: 8090 eureka: instance: hostname: localhost client: fetch-registry: false # 表示是否从Eureka Server获取注册信息,默认为true.因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,这里设置为false register-with-eureka: false # 表示是否将自己注册到Eureka Server,默认为true.由于当前应用就是Eureka Server,故而设置为false. service-url: # 设置与Eureka Server的地址,查询服务和注册服务都需要依赖这个地址.默认是http://localhost:8090/eureka/;多个地址可使用','风格. defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
7.启动项目
在浏览器中输入你设置的端口号我的是8090
localhost:8090
添加 EurekaProducer 服务生产者
1.按照同样的方式,创建一个项目,这里我们创建一个Spring Boot风格的服务,
创建时需要勾选 Spring Cloud Discover--> Eureka Discover Client 和 Spring Web 的依赖
2.在application启动类中加入注解@EnableEurekaClient,表明自己属于一个生产者。这里为了方便测试,直接使用@RestController获取返回值。
3.修改配置
server: port: 8081 spring: application: name: eureka-producer eureka: client: service-url: defaultZone: http://localhost:8090/eureka # 指定服务注册中心
4.启动应用,刷新Eureka控制台
可以看到服务已经注册到Eurek
创建 Eureka Consumer 服务消费者
1.通过 Spring Initializr,创建一个 Eureka Discovery Client 模块,同时要勾选加入Spring Web依赖。
2.修改原有配置,指定服务注册中心,这里还是使用yml文件。
# 服务注册中心 (单节点) server: port: 8082 spring: application: name: eureka-consumer eureka: client: service-url: defaultZone: http://localhost:8090/eureka # 指定服务注册中心
3.在启动类中添加@EnableDiscoveryClient表明标注类是消费者,加入restTemplate来消费相关的服务。
@SpringBootApplication @EnableDiscoveryClient public class EurekaConsumerApplication { public static void main(String[] args) { SpringApplication.run(EurekaConsumerApplication.class, args); } @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } }
4..创建controller层,消费远程服务
@RestController
public class DemoController {
@Autowired
RestTemplate restTemplate;
@RequestMapping("greet")
public String sayHello(@RequestParam String name){
return restTemplate.getForObject("http://EUREKA-PRODUCER/index?param=" + name, String.class);
}
}
5.配置完毕以后,启动服务消费者,刷新Eureka控制台,可以看到消费者已经注册。
5.打开浏览器输入localhost:{server.port}/path 进行服务调用,
这里我用 http://localhost:8082/greet?name=eureka ,可以看到请求正确返回,正确调用了服务提供者。