SpringCloud学习笔记-Enreka服务注册中心

          Spring Cloud和Dubbo是国内主流的微服务框架, 二者各有所长。 目前公司后台使用的是SpringMVC+Dubbo, 准备将接口层服务改造为Spring Cloud架构。 

        个人觉得Spring Cloud更加灵活、部署方便, 适用于为APP、WEB提供接口的服务, 以支持APP频繁的上线需求。Spring Cloud使用REST短连接方式实现各服务交互, Dubbo使用RPC长连接方式实现服务交互。

       SpringCloud的组件很多, 其中Eureka是服务注册和发现组件, 作用跟zookeeper差不多, 就是动态的添加或删除服务。


创建Eureka服务进程:

      打开IntelliJ Idea -> Create New Project -> Spring Intializr -> 设置包名 -> 勾选Enreka Server -> next

      可以看到Dependecies有很多选项, 都是Spring Cloud可以使用的组件。 本工程要作为注册中心服务进程, 所有选中Eureka Server就行了。


       查看工程代码, 添加@SpringBootApplication的类是程序入口类, 只需要再添加注解@EnableEnrekaServer就能声明当前工程为Eureka服务进程了。

        Spring Cloud和Spring MVC工程有个区别, SpringMVC工程要配置tomcat运行参数, 而Spring Cloud工程默认会配置运行参数为入口类。


      打开application.yml文件并设置如下参数:

#yml文件缩进2个空格
server:
  port: 10001
spring:
  application:
    name:enreka
eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
   表示server.port=10001, spring.application.name=enreka, eureka.instance.hostname=localhost等等, 其中eureka.client.registerWithEureka和eureka.client.fetchRegistry为false,表示当前工程是Eureka服务。
       运行程序, 最终会提示Started EnrekaServerDemoApplication,即程序入口类。


        用浏览器打开http://localhost:10001会看到管理界面(能看到所有已注册的服务,跟zookeeper差不多)。

        好了, 注册中心已经有了, 下面再搞了工程注册到Euraka服务里。  

  IntelliJ Idea -> Create New Project -> Spring Intializr -> 设置包名 -> 勾选Enreka Discovery -> next

        在入口类添加注解@EnableEnrekaClient, 表明当前服务是Eureka客户端。 

@EnableEurekaClient
@SpringBootApplication
public class Helloservice1Application {

	public static void main(String[] args) {
		SpringApplication.run(Helloservice1Application.class, args);
	}
}
       修改application.yml文件:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:10001/eureka/
server:
  port: 10002
spring:
  application:
    name: service-hello1
eureka.client.serviceUrl.defaultZone就是Enreka服务端地址, 使用多个Eureka服务时使用逗号分隔(跟zookeeper写法一样)。 例如:
   eureka.client.serviceUrl.defaultZone=http://localhost:10001/enreka,http://localhost:10010/enreka,http://localhost:10011/enreka
  PS: 向Eureka集群注册的好处是某个Eureka服务挂掉了,还可以访问其它Eureka服务。
 spring.application.name是服务名称, 在Spring Cloud框架里是区分各服务的唯一标识,zuul网关路由时会用到。

       新建一个Java文件, 添加注解@RestController表示它是一个接口类

@RestController
public class HelloController {

    @Value("${server.port}")
    String port;  //在application.yml文件里赋的值

    @RequestMapping("hello")
    public String doHello(@RequestParam String param) {
        return param + ":" + "port is " + port;
    }
}

    运行当前程序并在浏览器输入: http://localhost:10002/hello?param=“zhangsan”

    浏览器会显示:"zhangsan":port is 10002


    在浏览器输入http://localhost:10001 , 可以看到service-hello1服务已注册。 Status值UP表示服务可用。


     关闭服务后Status会变为Down,表示服务不可用。


       Eureka通过心跳方式判断服务是否可用, 当服务挂掉后Status变为Down, 服务重新OK后Status自动变为UP, 这就是Enreka的动态服务发现功能;

  



  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
整理自尚硅谷视频教程springboot高级篇,并增加部分springboot2.x的内容 一、Spring Boot与缓存 一、JSR107 Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, Cache, Entry 和 Expiry。 • CachingProvider定义了创建、配置、获取、管理和控制多个CacheManager。一个应用可 以在运行 期访问多个CachingProvider。 • CacheManager定义了创建、配置、获取、管理和控制多个唯一命名 的Cache,这些Cache 存在于CacheManager的上下文中。一个CacheManager仅被一个 CachingProvider所拥有。 • Cache是一个类似Map的数据结构并临时存储以Key为索引的值。一个 Cache仅被一个 CacheManager所拥有。 • Entry是一个存储在Cache中的key-value对。 • Expiry 每一 个存储在Cache中的条目有一个定义的有效期。一旦超过这个时间,条目为过期 的状态。一旦过期,条 目将不可访问、更新和删除。缓存有效期可以通过ExpiryPolicy设置。 二、Spring缓存抽象 Spring从3.1开始定义了org.springframework.cache.Cache 和 org.springframework.cache.CacheManager接口来统一不同的缓存技术; 并支持使用JCache(JSR- 107)注解简化我们开发; • Cache接口为缓存的组件规范定义,包含缓存的各种操作集合; • Cache接 口下Spring提供了各种xxxCache的实现;如RedisCache,EhCacheCache , ConcurrentMapCache 等; • 每次调用需要缓存功能的方法时,Spring会检查检查指定参数的指定的目标方法是否 已经被调用 过;如果有就直接从缓存中获取方法调用后的结果,如果没有就调用方法 并缓存结果后返回给用户。下 次调用直接从缓存中获取。 • 使用Spring缓存抽象时我们需要关注以下两点; 1、确定方法需要被缓存 以及他们的缓存策略 2、从缓存中读取之前缓存存储的数据 Cache 缓存接口,定义缓存操作。实现有:RedisCache、EhCacheCache、 ConcurrentMapCache等 CacheManager 缓存管理器,管理各种缓存(Cache)组件 @Cacheable 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存 @CacheEvict 清空缓存 @CachePut 保证方法被调用,又希望结果被缓存。 @EnableCaching 开启基于注解的缓存 keyGenerator 缓存数据时key生成策略 serialize 缓存数据时value序列化策略 @CacheConfig 抽取缓存的公共配置 三、几个重要概念&缓存注解 1、常用注解 2、常用参数 名字 位置 描述 示例 methodName root object 当前被调用的方法名 #root.methodName method root object 当前被调用的方法 #root.method.name target root object 当前被调用的目标对象 #root.target targetClass root object 当前被调用的目标对象类 #root.targetClass args root object 当前被调用的方法的参数列表 #root.args[0] 3、常用参数SPEL说明 名字 位置 描述 示例 caches root object 当前方法调用使用的缓存列表(如 @Cacheable(value= {"cache1","cache2"}) ), 则有两 个cache #root.caches[0].name argument name evaluation context 方法参数的名字. 可以直接 #参数 名 ,也可以使用 #p0或#a0 的形 式,0代表参数的索引; #iban 、 #a0 、 #p0 result evaluation context 方法执行后的返回值(仅当方法执 行之后的判断有效,如‘unless’ , ’cache put’的表达式 ’cache evict’的表达式 beforeInvocation=false ) #result 四、代码中使用缓存 1、搭建基本环境 1、导入数据库文件 创建出department和employee表 2、创建javaBean封装数据 3、整合MyBatis操作数据库 1.配置数据源信息 2.使用注解版的MyBatis; 1)、@MapperScan指定需要扫描的mapper接口所在的包

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值