IDEA中搭建一个SpringCloud微服务框架及简单介绍

了解以及搭建一个微服务框架SpringCloud

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

<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为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依赖;

<!--feign 用于服务间的通信-->
        <!-- https://mvnrepository.com/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);
    }
}

然后启动三个服务在浏览器中输入http://localhost:8781/hello?name=“sinder”就可以看到后台返回了Hello,"sinder",此时服务间的通信就搭建成功了。

在微服务中,实际上没有多大的区分,服务提供者也可以是服务消费者。

关于SpringBoot与SpringCloud版本对应问题。

实际应用版本更详细说明

微服务的框架搭建已经结束,接下来就是对一些基础知识的说明了,求关注哈哈哈!

 

原创文章 7 获赞 11 访问量 967

猜你喜欢

转载自blog.csdn.net/weixin_42009068/article/details/104498863