SpringCloud使用Nacos保存和读取变量

前言

在使用SpringCloud开发微服务时,经常会遇到一些比较小的后台参数配置,这些配置不足以单独开一张表去存储,而且其他服务会读取该参数。比如IP白名单。这时,使用Nacos去保存和读取就比较方便。

前提条件

Spring

Spring Cloud Stream整合Rabbit之重复投递

SpringCloudStream 整合Rabbit 时,消费端在处理失败时,如果需要进行重试,可以有如下几种重试机制:

方法1(默认):

当消费端在处理消息时抛出异常,那么默认会在当前线程的3次的Retry。该方法是默认的,可以通过修改配置文件,指定channel下的参数,例如:

MQ, Rabbit, Spring, Spring Cloud Stream

SpringCloudGateway CORS方案看这篇就够了

问题

在Spring Cloud项目中,前后端分离目前很常见,在调试时,会遇到两种情况的跨域:

  1. 前端页面通过不同域名或IP访问微服务的后台,例如前端人员会在本地起HttpServer 直连后台开发本地起的服务,此时,如果不加任何配置,前端页面的请求会被浏览器跨域限制拦截,所以,业务服务常常会添加如下代码设置全局跨域:

SpringCloud, SpringCloud Gateway

SpringCloud下skywalking的快速入门

什么是SkyWalking?

SkyWalking 是观察性分析平台和应用性能管理系统(APM, Application Performance Management),由个人开发者 吴晟 于2015年开源,2017年加入Apache孵化器。

它提供分布式跟踪、服务网格遥测分析、度量聚合和可视化的功能,支持Java、.Net、PHP、NodeJs、Golang、LUA语言探针,以及Envoy+Istio构建的Service Mesh,支持OpenTracing规范。

分布式, 链路跟踪

Akka入门系列(八):akka kafka Consumer

核心API

在使用Akka kafka consumer前, 先了解下几个核心API:

  • ConsumerSetting Consumer的配置信息;
  • ConsumerRecord Kafka消息的封装类,包含消息的K、V,以及该消息所属的topic, partition, offset, timestamp等;
  • ConsumerMessageConsumerRecord的进一步充血模型,提供了自动commit以及修改offset信息的API;
  • Subscription 该Consumer的订阅信息,有AutoSubscriptionManualSubscription两个子接口,分别用于自动从Topic读取Partition以及手动绑定Partition;

actor, akka, kafka, 分布式, 并发

Akka入门系列(七):akka kafka Producer

Akka Stream

在用Akka去对接Kafka之前,有必要先简单了解下Akka Stream,它是基于Reactive Stream(Akka是其创立成员之一)的。Akka Stream中,将流的拓扑处理逻辑命名为Graph,拓扑中每个操作命名为Operator
它将流式处理抽象为几个核心API:

  • Source : 有且仅有一个Output的operator,对应数据的来源,将数据反序列化后发送给下游逻辑。
  • Sink : 有且仅有一个Input的operator,对应最终数据的去向,常用于结果存储。
  • Flow : 有且仅有一个Input和Output的operator,用于定义数据的处理逻辑。
  • RunnableGraph : 一个对接了SourceSink,并且已经准备好run()Flow。一般用source.to(sink)source.runWith(sink, materializer)构成一个RunnableGraph,可通过via(flow)添加其他flow
  • Materializer : 这个SPI(Service Provider Interface)是根据前面定义的graph进行资源申请,生成相应Actor类,然后进行执行的。这篇博文从源码级对它的原理进行了阐述,写的相当透彻,就不再重复了。

actor, akka, kafka, 分布式, 并发

Akka入门系列(六):akka cluster中的路由和负载均衡

在使用路由功能之前,我们需要先了解下常规概念:

  • Router 路由器,消息由外部发送到路由器,再由路由器通过路由算法转发给具体的执行者,相当于消息的中转站。
  • Routee 路由目标,最早处理消息的地方。

在Akka中,提供了两种做路由的方式:

actor, akka, 分布式, 并发

Akka入门系列(五):akka cluster的基本使用

前面一个章节akka cluster管理介绍了Akka Cluster的底层原理,这一章就来看看如何使用。

集群后台接入

对外

actor, akka, 分布式, 并发

Akka入门系列(四):akka cluster原理

在前面remote actor一章提到过,akka remotingPeer-to-Peer的,所以基于remote功能的cluster是一个去中心化的分布式集群。

Akka Cluster将多个JVM连接整合在一起,实现消息地址的透明化和统一化使用管理,集成一体化的消息驱动系统。最终目的是将一个大型程序分割成若干子程序,部署到很多JVM上去实现程序的分布式并行运算(单机也可以起很多节点构成集群)。更重要的是, Akka Cluster集群构建与Actor编程没有直接的联系,集群构建是在ActorSystem层面上,实现了Actor消息地址的透明化,无需考虑目标运行环节是否分布式,可以按照正常的Actor编程模式进行开发。

我们知道,分布式集群是由若干节点组成的,那么节点的发现及状态管理是分布式系统一个比较重要的任务。Akka Cluster中将节点的生命周期划分为:

actor, akka, 分布式, 并发

P2P 网络核心技术:Gossip 协议

背景

Gossip protocol 也叫 Epidemic Protocol (流行病协议),实际上它还有很多别名,比如:“流言算法”、“疫情传播算法”等。

这个协议的作用就像其名字表示的意思一样,非常容易理解,它的方式其实在我们日常生活中也很常见,比如电脑病毒的传播,森林大火,细胞扩散等等。

event sourcing, 分布式