Java提升营

实体Bean

每个持久化POJO类都是一个实体Bean, 通过在类的定义中使用 @Entity 注解来进行声明。

1
2
3
4
5
6
7
@Entity
public class Flight implements Serializable {
Long id;
@Id
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
}
阅读全文 »

前言

Elasticsearch + Logstash + Kibana(ELK)是一套开源的日志管理方案,分析网站的访问情况时我们一般会借助 Google / 百度 / CNZZ 等方式嵌入 JS 做数据统计,但是当网站访问异常或者被攻击时我们需要在后台分析如 Nginx 的具体日志,而 Nginx 日志分割 / GoAccess/Awstats 都是相对简单的单节点解决方案,针对分布式集群或者数据量级较大时会显得心有余而力不足,而 ELK 的出现可以使我们从容面对新的挑战。

阅读全文 »

随着分布式服务架构的流行,特别是微服务等设计理念在系统中的应用,系统规模也会变得越来越大,各微服务间的调用关系也变得越来越复杂。通常一个由客户端发起的请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果。

在复杂的微服务架构系统中,几乎每一个前端请求都会形成一个复杂的分布式服务调用链路。那么就带来一系列问题,在业务规模不断增大、服务不断增多以及频繁变更的情况下,如何快速发现问题?如何判断故障影响范围?如何梳理服务依赖以及依赖的合理性?如何分析链路性能问题以及实时容量规划?面对上面这些问题,Spring Cloud Sleuth提供了分布式服务跟踪解决方案, 并且兼容支持了zipkin

阅读全文 »

概述

RabbitMQ是实现AMQP(高级消息队列协议)消息中间件的一种,主要是为了实现系统之间的双向解耦。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层保存这个数据。

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。

阅读全文 »

在上一篇中,我们定义了5个服务,eureka-service、eureka-client、feign-service、ribbon-service、zull-service,大家大概也想到了Config主要作用是什么?试想一下,我们有个电商系统,里面的项目有上百个,如果高可用算下来部署上千个服务。这么多的服务让我们的运维人员维护,如果一些服务的配置改动,手动去每个节点修改配置,是不是会疯掉?那么Spring Cloud Config很好的解决了这个问题,让我们一起看看它到底是怎么运作的。

阅读全文 »

最近想要给项目添加SSL, 使用HTTPS访问。 Spring boot 版本2.2.0、 集成Tomcat 版本9.0.26, 当启动项目的时候, tomcat无法加载JKS文件, 报java.io.IOException: Stream closed异常。

项目配置信息

1
2
3
4
5
server.port=443
server.ssl.key-store-type=JKS
server.ssl.key-store=C:\\Keystore\\mykey.jks
server.ssl.key-store-password=cccc
server.ssl.key-alias=*.mydomain.com
阅读全文 »

背景

最近项目中在和第三方进行联调一个接口,我们这边发送http请求给对方,然后接收对方的回应,代码都是老代码。

根据注释,对方的SDK中写好的Request类有一个无法序列化的bug,所以这边重新写了一个Request类,基本属性都是相同的,但是重点是有一个属性是静态内部类,还有两个是list属性。

阅读全文 »