- 浏览: 105881 次
- 性别:
- 来自: 北京
最新评论
-
sheungxin:
@仑山中鸟 @zl_xzl 不好意思,代码已丢。。。自己动手试 ...
自定义类加载器与spring的集成 -
昆仑山中鸟:
同求代码,看的云里雾里。自定义监听器WebContextLis ...
自定义类加载器与spring的集成 -
xzl_xzl:
代码都是片段,能否提供下具体的代码,正好我也有类似的需求。但我 ...
自定义类加载器与spring的集成 -
sheungxin:
@add2ws 我试下,多谢!
基于oracle的增量数据采集实现总结 -
add2ws:
用得着这么麻烦么,直接用kettle插入更新,配合oracle ...
基于oracle的增量数据采集实现总结
文章列表
RPC,同步消息
RabbitMQ默认的consumer为异步监听,RPC应用需要实现consumer的同步,可以使用QueueingConsumer(继承与DefaultConsumer,定义了一个堵塞队列LinkedBlockingQueue)实现同步
实际上就是服务端、客户端各定义一个消息队列,相互发送消息,客户端发送消息后同步等待结果返回
注意要点
发送消息时指定回复队列、corrId://发送消息,指定回复消息所在队列
BasicProperties props=new BasicProperties.Builder().correlationId(corr ...
Headers转发器
消息发送时可以在header中定义一些键值对,接收消息队列与headers转发器绑定时可以指定键值对,all、any两种方式(队列绑定转发器时指定的键值对与headers中存储的键值对匹配),匹配上即可接收到消息
注意要点
headers转发器://声明headers转发器
channel.exchangeDeclare("header_exchange", BuiltinExchangeType.HEADERS);
发布消息时增加header头信息://定义headers存储的键值对
Map<String, Object> ...
主题转发器(Topic)
Topic转发器的功效包含fanout、direct类型的转发器,其特殊的地方在于转发器与队列的绑定时routingkey可以使用通配符*、#,使用*就相当于fanout,不使用通配符就相当于direct,否则就是模糊匹配,匹配上的队列都可以收到消息
注意要点
topic转发器:channel.exchangeDeclare("topic_logs", "topic");
channel.basicPublish("topic_logs", severity , null, Serializa ...
路由选择(Routing)
Routing即按照某条路线把消息发送出去,所有这条路线上的队列都将接收到消息。
使用direct转发器,在转发器上使用同一routingkey绑定多个队列,根据routingkey发送消息,所有绑定的队列都将收到消息
注意要点
direct转发器,把消息直接转发到绑定routingkey的队列:channel.exchangeDeclare("direct_logs", "direct");
channel.basicPublish("direct_logs", severity ...
发布/订阅
即实现单点发送消息,多点接收。使用fanout转发器,广播到所有它知道的队列上
注意要点
fanout转发器中不需要routingKey,指定也无效
创建fanout转发器:channel.exchangeDeclare("fanout_logs", "fanout");
channel.basicPublish("fanout_logs", "" , null, SerializationUtils.serialize(object));
临时队列的创建://创建一个临时队列,返回队 ...
工作队列
工作队列的好处在于多个工作线程共享执行任务队列,使用round-robin的方式分发任务(简单的理解:依次把任务分配给工作进程,一次性分配1..n个任务,平均分配)。
注意要点
工作线程的产生,在同一队列上声明多个Consumer:channel.basicConsume(queue, false, consumer);
消息持久化://第二个参数durable设为true,实现消息持久化
channel.queueDeclare(queue, true, false, false, null);
// MessageProperties.PERSISTENT_TE ...
注意要点
同一队列多次创建://此处声明队列为了防止接收者先运行,队列还不存在时创建队列(同一队列只会创建一次)
channel.queueDeclare(queue, false, false, false, null);
消息发送类
package com.demo.mq.rabbitmq.example01;
import java.io.IOException;
import java.io.Serializable;
import org.apache.commons.lang3.SerializationUtils;
import com.demo. ...
开启management plugin功能
1、management plugin默认安装未开启,需要执行以下命令:
$ cd /usr/lib/rabbitmq/bin/
$ sudo rabbitmq-plugins enable rabbitmq_management
2、management plugin提供HTTP API来管理和监控RabbitMQ Server,具体包含如下功能:
删除、生成、列表,包括:exchanges,queues,bindings,users,virtual hosts and permissions
监视 queue 长度,每个 channe ...
1、RabbitMQ安装
官网下载地址:http://www.rabbitmq.com/download.html
引用RabbitMq、ActiveMq、ZeroMq、kafka之间的比较,资料汇总:
http://blog.csdn.net/linsongbin1/article/details/47781187
https://my.oschina.net/u/236698/blog/501834
1)、deb包安装(Ubuntu系统),下载rabbitmq-server_2.8.1-1_all.deb,下载地址:http://www.rabbitmq.com/install-debi ...
package com.demo.algorithm.sort;
public class NumberSwap {
/**
* 通过中间值进行交换
* @param a
* @param b
*/
public static void swap1(int a,int b){
int tmp=a;
a=b;
b=tmp;
display(a, b);
}
/**
* 两数求和然后相减的方式进行交换,x、y过大有可能超出int的最大值
* @param a
* @param b
*/
pu ...
对于排序算法,这些年用到的也不多,基本处于拿来用的状态,一直没有花时间稍微深入了解。最近下定决心自己动手写写,加深理解。查看了不少资料,有不少分析的很到位,帮助快速理解,在此感谢!
1、概念理解及实现
package com.demo.algorithm.sort;
/**
* 排序算法合集
* @author sheungxin
*
*/
public class NumberSort {
/**
* 插入排序-直接插入排序
* 工作原理:构建有序序列,对于未排序的数据,在已排序序列中从后向前扫描,找到相应位置并插入
* 参考 ...
参考文档
实现网站二维码扫描登录
http://blog.csdn.net/jiang1013nan/article/details/22651439
实现手机扫描二维码进行登录
http://www.daxueit.com/article/2581.html
思路梳理:
1、生成一个唯一码(标识符+sessionid+时间戳,对称加密),转换为二维码。
2、APP端扫描二维码,校验二维码有效性,通知服务端扫描成功(APP需要处于登录状态)
3、服务端收到扫描成功通知(可校验),推送消息(推送机制)给浏览器端,二维码转换状态为已扫描
4、同时返回授权地址到APP端,由APP端跳转到授权 ...