- 浏览: 411720 次
- 性别:
- 来自: 湖北
最新评论
-
huan1993:
murphee 写道你好,请问下如果任务完成是根据任务审核通过 ...
activiti会签 多实例例子 -
murphee:
你好,请问下如果任务完成是根据任务审核通过比例进行判断的要怎么 ...
activiti会签 多实例例子 -
huan1993:
u012385217 写道第三步里的 authenticat ...
spring security实现简单的url权限拦截 -
u012385217:
第三步里的 authentication 和 request ...
spring security实现简单的url权限拦截 -
huan1993:
xiaonan830203 写道太好了,网上找了1天都没找到的 ...
自定义注解结合切面和spel表达式
文章列表
在我们使用 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实例中 ...
以下的程序监控参数的代码,有些是从网络上获取的,此处进行一个记录是为了以后如果要用到方便记录。
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,当是第一次使用百度登录时,自动在业务中中创建一个用户。
...