shine10076的博客

热爱可抵岁月漫长


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

Springboot+websocket实现服务器消息推送

发表于 2020-08-16 | 分类于 网络 , 框架

Springboot + webSocket实现服务器消息推送

WebSocket协议

为什么需要WebSocket协议

因为HTTP协议有一个缺陷:通信只能由客户端发起。

这种单向请求的特点,注定了服务器如果有连续的变化,客户端想要获知就非常麻烦。我们只能用轮询的方式来了解服务器有没有最新的消息。

websocket协议简介

WebSocket协议最大特点就是服务器可以主动向客户端推送消息,客户端也可以主动向服务器发送消息。是服务器推送技术的一种。

lCcxUK.png

对比HTTP协议,WeSocket协议使得长连接变成了一个真正的长连接。通过第一个HTTP request建立了TCP连接之后,之后的交换数据都不需要再发HTTP request。并且和HTTP-keep-alive的区别在于WebSocket协议省去了大量的HTTP-Header信息,使得信息的传输更加的高效。

阅读全文 »

RabbitMQ高级特性

发表于 2020-02-27 | 分类于 框架

RabbitMQ消息队列高级特性

[TOC]

如何保障100%的投递成功

什么是生产端的可靠性投递

  • 保障消息的成功发出
  • 保障MQ节点的成功接收
  • 发送端收到MQ节点(Broker)
  • 完善的消息进行补偿机制

生产端的可靠性投递

  • 消息落库,对消息状态进行打标
  • 消息的延迟投递,做二次确认,回调检查
阅读全文 »

消息队列以及RabbitMQ使用

发表于 2020-01-13 | 分类于 框架

消息队列

消息队列思维导图

消息队列的概念

消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题。实现高性能、高可用、可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。

目前在生产环境,使用较多的消息队列有Kafka、ActiveMQ、RabbitMQ、RocketMQ。

为什么使用消息队列

主要有三个业务场景:解耦,异步,削峰

解耦

如果有多个系统需要数据,通过一个发布/订阅模型来和其他系统解耦。

l1LEa6.png

异步

场景: A系统接口一个请求,需要在本地写入数据库,还需要在BCD三个系统写入。用户等待时间为ABCD四个系统写入时间总和。

使用消息队列后,A系统只要把写入消息放到队列中即可返回,写入留给队列慢慢处理。

削峰

A系统在某段时间内,比如高峰期并发请求超出系统处理能力的上限。

这个时候可以使用MQ,将消息先存到队列中,等待系统慢慢处理,将高峰期的请求分摊到低峰期。

比如一个IOT系统传感器每秒传入几千条数据,但是数据库写入速度有限,此时

消息队列的优缺点

  • 系统可用性降低:依赖于MQ,MQ挂了消息队列将不可用。
  • 系统复杂度提高,考虑:消息有没有被重复消费,处理消息丢失,保证消息传递的正确性。
  • 一致性问题:A系统处理完返回后,万一BC系统有写入不成功的情况,数据就产生不一致。

广播

基本功能之一,进行广播。没有消息队列的话,每次新增一个消息接入方都需要联调一次新接口。使用消息队列的话,就只需要关心消息是否送达到消息队列中去。

阅读全文 »

Java8新特性

发表于 2019-12-23 | 分类于 编程语言

Java 8新特性

lambda表达式

也可称为闭包

闭包又称词法闭包

解释一:闭包是引用了自由变量的函数,这个被引用的变量将和这个函数一同存在。

解释二:闭包是函数和相关引用环境组成的实体。

1
2
(parameters)->expression
(parameters)->{ statements;}

主要特征

  • 可选类型声明:不需要声明参数类型,编译器统一识别参数值
  • 可选的参数圆括号:一个参数无需定义圆括号,多个参数需要定义圆括号
  • 可选大括号:主题包含了一个语句,就不需要使用大括号
  • 可选的返回关键字:主体只有一个表达式返回值则编译器自动返回值,大括号需要指定表达式返回一个数值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//lambda表达式例子
//不需要参数,返回值为5
()->5

//接收一个参数,返回其两倍
x -> 2*x

//返回x,y差值
(x,y)->x-y

//接受2个int整数,返回和
(int x, int y)->x+y

//接受一个String对象
(String s)->System.out.print(s)

注意事项:

  • lambda表达式主要用来执行定义行内执行的方法类型接口。
  • 免去了使用匿名方法的麻烦,简单强大的函数式编程。

lambda表达式中的局部变量具有final语义(即是final类型,或者必须不被后面代码修改)

阅读全文 »

HTTP不同版本之间比较

发表于 2019-09-21 | 分类于 网络基础

HTTP版本之间的比较

HTTP协议

HTTP协议(超文本传输协议,HyperText Transfer Protocol),用于提供一种接收和发布HTML页面的方法,默认使用80端口(HTTPS默认使用443端口)。HTTP协议基于TCP连接,因为TCP连接慢启动的特性,所以连接的重用比重新建立连接要好。

HTTP1.0

HTTP1.0是一种无状态,无连接的应用层协议,规定浏览器和服务器保持短暂连接,浏览器每次请求都要断开TCP连接。

HTTP1.0的的两个特点是短连接和队头阻塞(head of line blocking)。

  • 短连接:HTTP1.0短链接指定是浏览器每次请求需要与服务器建立一个TCP新连接。这样每次请求都要经历建立连接,启动和释放连接过程,连接无法复用,这样网络的利用率比较低。
  • 队头阻塞:由于HTTP1.0规定下一个请求必须在前一个请求到达之前才能发送,所以假设前一个请求一直不到达,下一个请求就不发送,同样后面的健康请求也阻塞。
阅读全文 »
12…6
Shine10076

Shine10076

28 日志
11 分类
24 标签
GitHub E-Mail
Links
  • 力扣
  • stack-overflow
  • GitHub
© 2020 Shine10076
|