1. 应用背景
项目中需要对GPS原始坐标进行高德坐标变形,GPS坐标一直在新增,为了保证服务的稳定性,采用了简单的消息队列进行处理。
设定定时任务,每次将待变形的坐标数据保存至待变形消息队列,然后变形服务去这个队列中取数据,将变形后的结果存入已变形消息队列,更新服务进入这个队列取数据,更新数据库。
备注:近5个月坐标转化量
2015年12月,日平均坐标量约6.16万
2015年11月,日平均坐标量约6.38万
2015年10月,日平均坐标量约3.71万
2015年09月,日平均坐标量约5.81万
2015年08月,日平均坐标量约7.40万
2. 消息队列
package com.autonavi.messagequeue;
import java.util.LinkedList;
import java.util.NoSuchElementException;
/**
* @note 消息队列FIFO
*/
public class MessageQueue<T> {
private int theMaxSizeOfQueue = 5000;
/**
* @param 1-锁定;0-可执行
*/
private int theLockStatusOfQueue = 1;
private LinkedList<T> msgList = new LinkedList<T>();
/**
* @param void
* @return t or null
*/
public T getMsg(){
T t;
try{
t = msgList.getFirst();
removeMsg();
}catch(NoSuchElementException e){
return null;
}
return t;
}
/**
* @param t
* @return true-添加成功;false-队列已满,需等候
*/
public boolean addMsg(T t){
boolean res = false;
if(lockStatusMsg() == false){
lockMsg();
int size = sizeMsg();
if(size < theMaxSizeOfQueue){
msgList.addLast(t);
res = true;
}else{
res = false;
}
}