IDEA中搭建⼀个SpringCloud微服务框架及简单介绍
了解以及搭建⼀个微服务框架SpringCloud
1、⾸先我们需要了解⼀下什么是微服务:
微服务是⼀种架构风格,⼀个⼤型复杂软件应⽤由⼀个或多个微服务组成。系统中的各个微服务可被独⽴部署,各个微服务之间是松耦合的。每个微服务仅关注于完成⼀件任务并很好地完成该任务。在所有情况下,每个任务代表着⼀个⼩的业务能⼒。
2、其次我们需要知道为什么要使⽤微服务:
微服务架构其实就是⼀种架构风格,我们将整个项⽬划分为多个独⽴的⼩项⽬,也就是我们俗称的微服务,可以理解为每个微服务都单独处理某个功能模块,可以独⽴开发、测试、部署、监控和扩展,甚⾄可以⽤不同的编程语⾔开发它们。它有利于我们平时项⽬的开发,解决了⼀体化架构项⽬难以扩展,开发周期长,故障级联等问题。
3、最后了解⼀下微服务的优缺点都有哪些:
优点:
独⽴开发部署
围绕业务功能创建、组织代码
改善故障隔离,⼀个服务的宕机不会影响其他服务的使⽤
易于规模化开发,多个团队可以并⾏开发
可以使⽤不同语⾔开发
缺点:
测试⼯作困难增加
部署复杂,成本⾼
开发⼈员需要处理分布式系统的复杂性,提⾼了开发复杂性
⽆论哪种技术、架构都有其存在的优缺点,⾄于怎么应⽤需要开发⼈员根据开发需求环境做出相应的改变。只有在⾯对不同的情况才能选择出真正最优的解决⽅案。
微服务中主要⾓⾊有
服务注册与发现
服务提供者
服务消费者
这⾥主要介绍这三种⾓⾊,下⾯开始搭建⼀个微服务架构;
1、先在idea中创建单个springboot服务,然后导⼊所需要的maven包。
现在先创建⼀个服务注册中⼼Eureka。导⼊其maven,在这⾥我使⽤的SpringBoot版本是2.2.4.RELEASE,其可以使⽤的SpringCloud版本是Hoxton.SR2,以下是其maven依赖;
创建springboot单个服务可以在我另⼀个博客查看,在这⾥就不详细说了
<dependencies>
<!--服务注册中⼼服务端  eureka server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR2</version>
<!--Dalston只兼容的springboot版本为1.5.X,不兼容2.0.X-->
<!--springboot2.2.4对应Hoxton.SR2-->
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>微服务注册中心有哪些
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为localhost:8761/eureka/    service-url:
defaultZone: 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: 127.0.0.1:8761/eureka/  # 注册中⼼
spring:
application:
name: spring-cloud-client-1 # 服务名
2、配置完成后,需要在启动类中使⽤@EnableEurekaClient注解开启eureka客户端,启动服务注册中⼼与服务提供者,就能在下⾯页⾯中看到刚刚创建的服务。
创建⼀个服务消费者
1、创建⼀个服务消费者重复上述操作即可,创建后启动服务就可以看见已经注册的两个服务。
在创建好服务注册中⼼、服务提供者跟服务消费者后,现在来做⼀个demo来实现服务之间的通信吧,在这⾥我们使⽤Feign来实现通信,需要在服务提供者与消费者的maven中添加feign依赖;
<!--feign ⽤于服务间的通信-->
<!-- mvnrepository/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
利⽤feign实现服务通信
在服务提供者的服务中新建⼀个服务接⼝与实现类;
public interface DemoService {
String sayHello(String name);
}
@Service
public class DemoServiceImpl implements DemoService {
@Override
public String sayHello(String name) {
return "Hello,"+name;
}
}
然后创建⼀个Controller类
@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值是服务提供者的服务名称。
这⾥需要注意的是,接⼝的返回类型跟请求类型、参数类型需要跟服务提供的返回类型⼀致。
创建⼀个controller类⽤来测试
@RestController
public class HelloController {
@Autowired
private HelloService helloService; //创建引⼊消费⽅的helloService
//⽤于解决服务之间的通信
@RequestMapping(value = "/hello",method = RequestMethod.GET)
public String sayHello(String name){
return helloService.sayHello(name);
}
}
在微服务中,实际上没有多⼤的区分,服务提供者也可以是服务消费者。
关于SpringBoot与SpringCloud版本对应问题。
实际应⽤版本更详细说明
微服务的框架搭建已经结束,接下来就是对⼀些基础知识的说明了,求关注哈哈哈!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。