springcloud

Posted zcy1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于springcloud的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端Eureka 服务信息Eureka 发现管理Eureka 安全配置Eureka-HA(高可用) 机制Eur(代码片段

SpringCloud+Feign环境下文件上传与form-data同时存在的解决办法

SpringCloud环境搭建服务提供者 我们需要拿到实体类,所以要配置api module, 在这时报错

springcloud项目多个微服务中,jwt鉴权的代码应该放在哪个服务中?

微信小程序代码片段

VSCode自定义代码片段——CSS选择器