`
文章列表
    在我们使用 netty 的过程中,有时候为了高效的传输数据,经常使用 protobuf 进行数据的传输,netty默认情况下为我们实现的 protobuf 的编解码,但是默认的只能实现单个对象的编解码,但是我们在使用 netty 的过程中,可能需要传输的对象有各种各样的,那么该如何实现对protobuf多协议的解码呢?       在 protobuf 中有一种类型的字段叫做  oneof , 被 oneof 声明的字段就类似于可选字段,在同一时刻只有一个字段有值,并且它们会共享内存。   有了上述基础知识,我们来实现一个简单的功能。   需求:        客户端在 ...
   protobuf 是谷歌的语言无关,平台无关,可扩展的,高效的结构化数据序列化机制,比xml和json的序列化的速度更快,此处记录一下 proto3 的语法,防止以后忘记。   注意:proto3 语法需要注意的事项,见下方代码中的注释   syntax = "proto3"; // 定义这个文件的语法是proto3、默认情况下是proto2 这个指定语法行必须是文件的非空非注释的第一个行。 // 申明一个包 package com.huan.proto; option java_package = "com.huan.proto&quo ...
      通常情况下为了redis的高可用,我们一般不会使用redis的单实例去运行,一般都会搭建一个 redis 的集群去运行。此处记录一下 redis5 以后 cluster 集群的搭建。 一、需求 redis5的安装 搭建一个3主3从的集群 动态的往集群中增加节点  |- 增加一个主节点  |- 增加一个从节点 动态的从集群中删除节点  |- 删除一个从节点  |- 删除一个主节点 二、前置知识 1、在 redis5 之后,redis cluster 的搭建不在需要默认的ruby脚本,使用 redis-cli 命令即可完成搭建 2、创建集群的这些redis实例中 ...
将博客搬至CSDN  新地址
     以下的程序监控参数的代码,有些是从网络上获取的,此处进行一个记录是为了以后如果要用到方便记录。   1、引入jar包,为了获取一些cpu的使用率等信息 <dependency> <groupId>com.github.oshi</groupId> <artifactId>oshi-core</artifactId> <version>3.12.2</version> </dependency> <depen ...
 一、缓冲区简介           Nio中的 Buffer 是用于存储特定基础类型的一个容器。为了能熟练的使用 Nio中的各种 Buffer , 我们需要理解 Buffer 中的 三个重要 的属性。      1. capacity:表示的是这个缓冲区包含元素的个数,容量不可改变也不可是负数       2. limit:表示的是缓冲区中第一个不可读或写的元素的索引,它不可是负数并且 <= capacity       3. position:表示的是缓冲区中下一个元素可读或可写的元素的索引,它不可是负数并且 <= limit     0 <= position ...
    最近在学习netty相关的知识,看到netty可以实现 websoket,因此记录一下在netty中实现websocket的步骤,主要实现传递文本消息和传递二进制消息(此处只考虑图片),如果是别的可以考虑自定义协议。   需求:     1、使用 netty 实现 websocket 服务器     2、实现 文本信息 的传递     3、实现 二进制 信息的传递,如果需要传输别的信息,考虑使用自定义协议     4、只需要考虑 websocket 协议,不用处理http请求   实现细节:     1、netty中对websocket增强的处理器         ...
    在上篇文章  springboot 整合 rabbitmq 中,我们实现了springboot 和rabbitmq的简单整合,这篇文章主要是对上篇文章功能的增强,主要完成如下功能。   需求:     生产者在启动的时候,自动创建好队列、绑定、交换器并设置 ...
    在这篇博客中,简单记录一下 rabbitmq 服务器中一些基本的概念。   Connection: connection 为 TCP连接,是我们的应用程序和RabbitMQ服务器真正发送和接收数据的地方。 Channel: channel为connection创建的“信道”,具体的AMQP命令都是通过信道发送出去的。每一条信道都有一个唯一的id,channel是线程不安全的。 bindingKey和routingKey的区分:     bindingkey: 在使用绑定的时候,需要用到的路由键是 bindingkey。涉及到的客户端方法: channel.exchange ...
    这篇文章,我们使用springboot来简单整合一下RabbitMQ,由于sprinboot的 “约定优于配置“,使得我们整合起来非常方便。参考文档   实现功能:  自动申明队列、交换器和绑定  使用自定义的MessageConvert如何进行配置  如何传递 JavaBean 消息和普通消息  如何手动签收消息 实现要点:     ** 自定申明队列、交换器和绑定           1、通过使用@Queue等注解实现           2、使用@RabbitListener来实现     ** 使用自定义的MessageConvert         ...
    本文简单记录一下 spring 整合 rabbitmq,此处引入spring boot是为了方便引入和rabbitmq整合相关的jar包,并没有使用spring boot整合 rabbitmq。   实现功能 完成 spring 和 rabbitmq 的整合 完成使用 rabbitAdmin 创建队列等 完成使用 @Bean 注解声明队列等 完成使用 RabbitTemplate 进行发送消息 使用 SimpleMessageListenerContainer 进行消息的监听,可以对消息进行各种适配等 整合步骤: 1、引入 jar 包。 2、配置 Connect ...
死信队列&死信交换器:DLX 全称(Dead-Letter-Exchange),称之为死信交换器,当消息变成一个死信之后,如果这个消息所在的队列存在x-dead-letter-exchange参数,那么它会被发送到x-dead-letter-exchange对应值的交换器上,这个交换器就称 ...
     在使用 RabbitMQ 的时候,有时候当我们生产者发送一条消息到 RabbitMQ 服务器后,我们 生产者想知道消息是否到达了 RabbitMQ 服务器上。这个时候我们应该如何处理?      针对上述问题,RabbitMQ 提供了2中解决方案。 通过事务机制实现(不推荐) 通过发送方确认(publisher confirm)机制实现(推荐)      注意:        1、上方2中方式不可共存,只能选取一种,如果一个channel上开启事务又开启confirm则会报错。         2、如果发送消息的交换器没有匹配的队列,那么消息也会丢失。 通过事务机制 ...
    在日常开发中,有时候我们经常需要和第三方接口打交道,有时候是我们调用别人的第三方接口,有时候是别人在调用我们的第三方接口,那么为了调用接口的安全性,一般都会对传输的数据进行加密操作,如果每个接口都由我们自己去手动加密和解密,那么工作量太大而且代码冗余。那么有没有简单的方法,借助 spring 提供的  RequestBodyAdvice 和 ResponseBodyAdvice 可以实现解密和加密操作。   需求:      1,后台方法上如果有@Encrypt注解和@RequestBody修饰的方法,需要进行参数的解密          2,后台方法上如果有@Encrypt ...
     在早期我写过一篇spring social理解的文章,介绍了一些spring social的概念,但是没有提供一个例子。在这篇博客中,提供一个简单的spring social的例子,实现 百度登录,那为什么不实现QQ登录或微信登录,主要是在QQ和微信上申请应用比较麻烦,没有百度方便,在文章的末尾我也放出 QQ登录 和 微信登录 的源码。2018-11-28号增加了一个 github 的登录。   实现功能:      1,实现百度登录      2,与 spring security 整合      3,当是第一次使用百度登录时,自动在业务中中创建一个用户。      ...
Global site tag (gtag.js) - Google Analytics