SpringCloud微服务入门

SpringCloud微服务入门

  1. 初识SpringCloud
  2. Eureka注册中心
  3. HelloWorld

1.初识SpringCloud

1.1 简介 :

springCloud是基于SpringBoot的一整套实现微服务的框架。因为它不是一个组件,而是许多组件的集合。他提供了微服务开发所需的配置管理、服务发现、负载均衡、熔断器、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话集群状态管理等组件

1.2版本命名:

SpringCloud的版本命名比较特殊,是按照伦敦地铁站的站名 命名的

1.3 涉及的组件:

  • Eureka:注册中心
  • Zuul:服务网关
  • ribbon:负载均衡
  • Feign:服务调用
  • Hystrix:熔断器
    以上只是其中一部分,具体架构图:
    SpringCloud微服务入门_第1张图片

2. Eureka注册中心

2.1 简介:

Eureka负责管理记录服务提供者的信息。服务调用者无需自己寻找服务,而是把自己的需求告诉Eureka,然后Eureka会把符合你需求的服务告诉你。
同时,服务提供方与Eureka之间通过“心跳”机制进行监控,当某个服务提供方出现问题,Eureka自然会把它从服务列表中剔除。
这就实现了服务的自动注册、发现、状态监控

2.2 原理图:

SpringCloud微服务入门_第2张图片

•Eureka:就是服务注册中心(可以是一个集群),对外暴露自己的地址
•提供者:启动后向Eureka注册自己信息(地址,提供什么服务)
•消费者:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新
•心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态

3.HelloWorld

3.1 环境搭建

3.1.1 创建springboot项目
SpringCloud微服务入门_第3张图片
3.1.2 选择依赖
SpringCloud微服务入门_第4张图片

3.2 Eureka配置参数

3.2.1添加依赖
SpringCloud微服务入门_第5张图片
3.2.2 启动类添加注解:开启Eureka
SpringCloud微服务入门_第6张图片
3.2.3 配置文件
SpringCloud微服务入门_第7张图片
3.2.4 启动服务,并访问:http://127.0.0.1:10086,出现下图界面,至此配置eureka成功
SpringCloud微服务入门_第8张图片
我们现在可以看到注册中心是空的:
在这里插入图片描述
下边我们创建服务提供方服务消费方,并注册到注册中心

3.3 服务提供方的实现

3.3.1创建普通springboot项目
SpringCloud微服务入门_第9张图片
3.3.2配置文件添加配置
SpringCloud微服务入门_第10张图片
3.3.3 编写测试代码
SpringCloud微服务入门_第11张图片
3.3.4运行测试访问
SpringCloud微服务入门_第12张图片
3.3.5注册到注册中心
3.3.5.1 pom文件
SpringCloud微服务入门_第13张图片

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
<!-- SpringCloud的依赖 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.RC1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!-- Spring的仓库地址 -->
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

3.3.5.2启动类添加注解,开启Eureka客户端功能
SpringCloud微服务入门_第14张图片
3.3.5.3配置类配置Eureka注册信息

server:
  port: 8082
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb1?useUnicode=true&characterEncoding=utf8
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: service # 应用名称
  main:
    allow-bean-definition-overriding: true #当遇到同样名字的时候,是否允许覆盖注册
eureka:
  client:
    service-url: # EurekaServer地址
      defaultZone: http://127.0.0.1:10086/eureka
  instance:
    prefer-ip-address: true # 当调用getHostname获取实例的hostname时,返回ip而不是host名称
    ip-address: 127.0.0.1 # 指定自己的ip信息,不指定的话会自己寻找

3.3.5.4 运行测试
在这里插入图片描述
注册成功

3.4 服务消费方的实现

3.4.1创建普通springboot项目
3.4.2启动类
SpringCloud微服务入门_第15张图片
3.4.3编写测试代码
SpringCloud微服务入门_第16张图片
3.3.4测试
SpringCloud微服务入门_第17张图片
3.4.5注册到注册中心
3.4.5.1pom文件添加配置与上文一致
3.4.5.2启动类添加注解,开启Eureka客户端功能
SpringCloud微服务入门_第18张图片
3.4.5.3配置类配置Eureka注册信息

server:
  port: 8080
spring:
  application:
    name: consumer # 应用名称
eureka:
  client:
    service-url: # EurekaServer地址
      defaultZone: http://127.0.0.1:10086/eureka
  instance:
    prefer-ip-address: true # 当其它服务获取地址时提供ip而不是hostname
    ip-address: 127.0.0.1 # 指定自己的ip信息,不指定的话会自己寻找

3.4.5.4修改测试代码

@RestController
@RequestMapping("/consume")
public class ConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping
    public String consume(@RequestParam("id") String id) {
        //1、 根据user-service获取user-serivce 的集群的信息
        List<ServiceInstance> instances = discoveryClient.getInstances("service");
        //2、由于我们没有集群,只有一个,所以直接取出第一个
        ServiceInstance instance = instances.get(0);
        //3、拼接URL
        String url = "http://"+instance.getHost()+":"+instance.getPort()+"/user/"+id;
        // 使用restTemplate发起请求
        ResponseEntity<String> entity = restTemplate.getForEntity(url, String.class);
        // 获取返回对象
        String body = entity.getBody();
        return body;
    }
}

3.4.5.5运行测试
两个注册信息
在这里插入图片描述
服务消费方测试
SpringCloud微服务入门_第19张图片
至此Springcloud注册中心入门完成!

了解跟多查看专业文档:
方志朋Springcloud入门

你可能感兴趣的:(java,spring)