1、首先我们需要了解一下什么是微服务:
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
2、其次我们需要知道为什么要使用微服务:
微服务架构其实就是一种架构风格,我们将整个项目划分为多个独立的小项目,也就是我们俗称的微服务,可以理解为每个微服务都单独处理某个功能模块,可以独立开发、测试、部署、监控和扩展,甚至可以用不同的编程语言开发它们。它有利于我们平时项目的开发,解决了一体化架构项目难以扩展,开发周期长,故障级联等问题。
3、最后了解一下微服务的优缺点都有哪些:
优点:
缺点:
无论哪种技术、架构都有其存在的优缺点,至于怎么应用需要开发人员根据开发需求环境做出相应的改变。只有在面对不同的情况才能选择出真正最优的解决方案。
微服务中主要角色有
这里主要介绍这三种角色,下面开始搭建一个微服务架构;
1、先在idea中创建单个springboot服务,然后导入所需要的maven包。
现在先创建一个服务注册中心Eureka。导入其maven,在这里我使用的SpringBoot版本是2.2.4.RELEASE,其可以使用的SpringCloud版本是Hoxton.SR2,以下是其maven依赖;
创建springboot单个服务可以在我另一个博客查看,在这里就不详细说了
https://blog.csdn.net/weixin_42009068/article/details/104443191
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.cloud
spring-cloud-dependencies
Hoxton.SR2
pom
import
dependencyManagement标签用于声明依赖,管理版本之间的关系(统一管理版本),并不实现引入。
2、导入依赖包后需要在yml配置文件中编写配置信息;以及在启动类中使用@EnableEurekaServer注解开启注册中心服务。
# 配置服务名以及注册中心地址等
spring:
application:
name: spring-cloud-eureka # 应用名称,会在Eureka显示
server:
port: 8761 # 服务端口
eureka:
instance:
hostname: peer1 # 设置当前实例主机名称
client:
register-with-eureka: false # 是否将自己注册到eureka server,构建集群环境时,需将自己注册到集群中,默认为true
fetch-registry: false # 是否从eureka server获取注册信息,构建集群环境时,需同步其他eureka server节点,默认为true
# 指定服务注册中心地址,类型为hashMap,并且设置有一组默认值,默认key为defaultZone,默认value为http://localhost:8761/eureka/
service-url:
defaultZone: http://127.0.0.1:8761/eureka/ # 设置与eureka server交互的地址,查询服务和注册服务都需要依赖这个地址
3、启动项目,然后输入127.0.0.1:8761后出现这个页面就证明成功了,接下来就搭建服务提供者跟消费者了。
1、创建一个服务提供者同样需要新建一个服务,然后导入相关依赖,并且配置YML文件。
依赖文件与上面相同,只是yml配置稍微有点不一样
# 服务提供方-client客户端
server:
port: 8771 # 配置服务端口
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8761/eureka/ # 注册中心
spring:
application:
name: spring-cloud-client-1 # 服务名
2、配置完成后,需要在启动类中使用@EnableEurekaClient注解开启eureka客户端,启动服务注册中心与服务提供者,就能在下面页面中看到刚刚创建的服务。
1、创建一个服务消费者重复上述操作即可,创建后启动服务就可以看见已经注册的两个服务。
在创建好服务注册中心、服务提供者跟服务消费者后,现在来做一个demo来实现服务之间的通信吧,在这里我们使用Feign来实现通信,需要在服务提供者与消费者的maven中添加feign依赖;
org.springframework.cloud
spring-cloud-starter-openfeign
2.2.1.RELEASE
public interface DemoService {
String sayHello(String name);
}
@Service
public class DemoServiceImpl implements DemoService {
@Override
public String sayHello(String name) {
return "Hello,"+name;
}
}
@RestController
public class DemoController {
@Autowired
private DemoService demoService;
@RequestMapping(value = "/hello",method = RequestMethod.GET)
public String sayHello(String name){
System.out.println("被127.0.0.1:8781调用了hello接口");
return demoService.sayHello(name);
}
}
写好一个服务提供者的demo后,需要在服务消费者中编写操作类
@Component
@EnableFeignClients
@FeignClient(value = "spring-cloud-client-1") //注册在服务中心的application name//用于与该服务进行通信
public interface HelloService {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
String sayHello(@RequestParam(value = "name") String name);
}
@FeignClient(value = "spring-cloud-client-1")是用来标注通信服务名称,value值是服务提供者的服务名称。
这里需要注意的是,接口的返回类型跟请求类型、参数类型需要跟服务提供的返回类型一致。
@RestController
public class HelloController {
@Autowired
private HelloService helloService; //创建引入消费方的helloService
//用于解决服务之间的通信
@RequestMapping(value = "/hello",method = RequestMethod.GET)
public String sayHello(String name){
return helloService.sayHello(name);
}
}
然后启动三个服务在浏览器中输入http://localhost:8781/hello?name=“sinder”就可以看到后台返回了Hello,"sinder",此时服务间的通信就搭建成功了。
在微服务中,实际上没有多大的区分,服务提供者也可以是服务消费者。
微服务的框架搭建已经结束,接下来就是对一些基础知识的说明了,求关注哈哈哈!