zoukankan      html  css  js  c++  java
  • springcloud

    Spring Cloud 项目总结DEMO - 最基础的项目搭建(二) 

    W  :https://my.oschina.net/u/3244751/blog/2923421
      weberos 发布于 2018/11/23 03:36
     
    字数 1685
     
    阅读 848
     
    收藏 0
       

        搭之前先说说都需要什么,首先既然是微服务,那么肯定要有一个注册中心,统一管理各个服务,这就是Eureka,然后这个注册中心上还需要有服务的提供者,也就是service,有了注册中心和服务提供者还需要有个服务消费者,也就是调用服务的client端,有了这3者,我们就能搭建最简单的Spring Cloud架构了。

        先来个注册中心,如果你是用的IDEA那么搭建Eureka那是相当简单

    然后下一步设置名称啥的,我就不截图了。

    再下一步

    看见了吗?人家IDEA都给咱准备好了,直接就有Eureka,当然左边那列里还有很多常用的组件,没事都可以看看

    接着下一步,完成,然后在resources里新建一个文件application.yml,文件里配置一下端口和名称

    server:
      port: 8761
    
    eureka:
      instance:
        hostname: localhost
        #服务过期时间配置,超过这个时间没有接收到心跳EurekaServer就会将这个实例剔除
        #注意,EurekaServer一定要设置eureka.server.eviction-interval-timer-in-ms否则这个配置无效,这个配置一般为服务刷新时间配置的三倍
        #默认90s
        lease-expiration-duration-in-seconds: 15
        #服务刷新时间配置,每隔这个时间会主动心跳一次
        #默认30s
        lease-renewal-interval-in-seconds: 5
        preferIpAddress: true
      server:
        #关闭自我保护
        enable-self-preservation: false
        #启用主动失效,并且每次主动失效检测间隔为3s
        #默认60s
        eviction-interval-timer-in-ms: 3000
        #eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。
        #由于启用了evict其实就用不太上改这个配置了
        #默认180s
        responseCacheAutoExpirationInSeconds: 180
        #eureka server刷新readCacheMap的时间,注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上
        #默认30s
        responseCacheUpdateInvervalMs: 3000
      client:
        #eureka client刷新本地缓存时间
        #默认30s
        registryFetchIntervalSeconds: 5
        registerWithEureka: false
        fetchRegistry: false
        serviceUrl:
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      ribbon:
          #eureka客户端ribbon刷新时间
          #默认30s
          ServerListRefreshInterval: 1000
    spring:
      application:
        name: eurka-server

        这个设置有些复杂,因为Erueka有一些坑,服务提供者如果掉线了Erueka不知道,需要等待一段时间才知道,所以这里配置的比较多,如果搭demo的话,其实只需要保留server和spring就可以了

        接下来给启动文件添加个注解@EnableEurekaServer

    OK,搞定,启动项目,浏览器输入http://localhost:8761/

    这样一个Erueka注册中心就搭建好了,是不是超级简单?用eclipe开发的朋友可以去我的源码里复制pom文件一样也很简单

    下面再来个服务端,跟上面一样,同样是新建一个maven子项目,名字就叫serviceorder,订单服务,刚才的pom用的是Erueka的server,这次用client

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
    </dependencies>

        这是pom文件,我用的server也没报错,不知道为啥,另外又加了一个web,因为需要用到@controller注解

    然后是yml配置文件

    server:
      port: 8762 #8762 8763
    
    spring:
      application:
        name: serviceorder
    
    eureka:
      instance:
        #服务过期时间配置,超过这个时间没有接收到心跳EurekaServer就会将这个实例剔除
        #注意,EurekaServer一定要设置eureka.server.eviction-interval-timer-in-ms否则这个配置无效,这个配置一般为服务刷新时间配置的三倍
        #默认90s
        lease-expiration-duration-in-seconds: 15
        #服务刷新时间配置,每隔这个时间会主动心跳一次
        #默认30s
        lease-renewal-interval-in-seconds: 5
        preferIpAddress: true
      client:
        #eureka client刷新本地缓存时间
        #默认30s
        registryFetchIntervalSeconds: 5
        serviceUrl:
          defaultZone: http://localhost:8761/eureka/

    一样需要配置端口,名称,另外需要配置Eureka注册中心的地址。

    然后新建几个包,模拟一下正常的项目,我随便建了几个,controller,service等

    注意一下这个注解,原来用是@controller,不知道为啥总是报错,后来改成@restcontroller就好了。。。。

    接着启动项目,就能看到这个服务了

    看到服务后证明服务没有问题,然后再试一下刚才的接口能不能用,浏览器输入http://localhost:8762/order/find

    没问题,证明这个服务是好的,接下来就要调用服务了

    其实调用服务如果前端框架玩的溜的话,也可以使前端框架调用,但本人前端不灵,就用还用spring实现了,跟刚才一样,继续创建一个新的maven子项目,不过这次要多引一些jar包了,需要feign,其实也可以使用ribbon,不过feign整合了ribbon的负载均衡,也整合了Hystrix的熔断,所以我们使用feign,pom配置如下

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>/scope>
            </dependency>
        </dependencies>

    接着配置application.yml

    eureka:
      instance:
        #服务过期时间配置,超过这个时间没有接收到心跳EurekaServer就会将这个实例剔除
        #注意,EurekaServer一定要设置eureka.server.eviction-interval-timer-in-ms否则这个配置无效,这个配置一般为服务刷新时间配置的三倍
        #默认90s
        lease-expiration-duration-in-seconds: 15
        #服务刷新时间配置,每隔这个时间会主动心跳一次
        #默认30s
        lease-renewal-interval-in-seconds: 5
        preferIpAddress: true
      client:
        serviceUrl:
          defaultZone: http://localhost:8761/eureka/
      ribbon:
        #eureka客户端ribbon刷新时间
        #默认30s
        ServerListRefreshInterval: 1000
    feign:
        hystrix:
            enabled: true
        httpclient:
          enabled: true
    hystrix:
        command:
          default:
            execution:
              timeout:
                enabled: false
    ribbon:
      ReadTimeout: 5000
      ConnectTimeout: 5000
    server:
      port: 8765
    spring:
      application:
        name: client
    

    同样是端口,名称,Eureka注册中心地址

    在程序的启动类ServiceFeignApplication ,加上@EnableFeignClients注解开启Feign的功能:

    @SpringBootApplication
    @EnableEurekaClient
    @EnableFeignClients
    public class ClientApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ClientApplication.class, args);
        }
    }

    然后是创建个controller,和service,需要service利用feign去调用刚才创建的servcieorder服务里的方法,并且需要fallback,这个fallback就是熔断器,一般只返回一个错误信息,里面尽量不要写逻辑方法

    controller,注入service

    service,写@FeignClient(value = "serviceorder",fallback = OrderHystric.class)注解,value是服务名称,fallback是对应的熔断

    Hystric熔断,实现service接口,一般只记录错误

    然后启动项目后就能在注册中心看到client了

    再浏览器输入http://localhost:8765/order/find,能看到下面的界面

    OK。大功告成!

    源码地址 https://gitee.com/weberos/springcloud.git

  • 相关阅读:
    不会吧不会吧,还有开发不会Java填充PDF模板数据的,赶紧看看吧
    关于Redis分布式锁这一篇应该是讲的最好的了,先收藏起来再看!
    iOS-----后台运行
    iOS-----使用GCD实现多线程
    iOS-----线程同步与线程通信
    iOS-----多线程之NSThread
    iOS-----MFMessageCompose 和 MFMailComposeViewController的使用方法
    iOS-----使用AddressBookUI管理联系人
    iOS-----使用addressBook管理联系人之修改联系人
    iOS-----简易地CocoaAsyncSocket使用
  • 原文地址:https://www.cnblogs.com/zcy1995/p/11791927.html
Copyright © 2011-2022 走看看