1 後台結構
後台的架構是 SpringMVC, Spring, jpa(HibernateJpaDialect),
DataSource(c3p0), Mysql(InnoBDB),
transactionManager(JpaTransactionManager)。
2 問題環境
@Transactional(value = "transactionManager", isolation = Isolation.READ_UNCOMMITTED)
public Object addScenicSpot(int tourGuideID, String jsonStr) {
Djd_js entity = new Djd_js();
try{
_setEntity(entity, jsonStr);
entity.setDaoyouID(tourGuideID);
jdjsDao.save(entity);
int spotId = entity.getId();
//添加信息到消息队列中
try {
Sender sender = new SenderImpl();
sender.getGPSFromBaiduAPI("jdjs", spotId, entity.getDizhi());
} catch (InterruptedException e) {
return false;
}
return spotId;
}catch (Exception e){
return false;
}
}
以上是保存的部分,并把得到的 ID 发送到消息队列中,下边是消息队列的处理部分
public boolean updateLngAndLat(MessageVo messageVo) {
System.out.println("CreateTime--------"+messageVo.getCreateDate());
System.out.println("Address--------"+messageVo.getContent());
System.out.println("Id--------"+messageVo.getId());
Djd_js entity = jdjsDao.findOne(messageVo.getId());
System.out.println("entity-Address--------"+entity.getDizhi());
、、运行到这里就直接卡住了,如果注释掉查询,其他的调用皆正常。
Map<String, Object> result = LngAndLatUtil.getLngAndLat(((MessageVo) messageVo).getContent());
System.out.println("result--------"+(int)result.get("result"));
if (1 == (int)result.get("result")){
entity.setJingdu(Double.valueOf(result.get("lng").toString()));
entity.setWeidu(Double.valueOf(result.get("lat").toString()));
System.out.println("message-------------------------------"+"lng:"+Double.valueOf(result.get("lng").toString())+", lat:"+Double.valueOf(result.get("lat").toString()));
jdjsDao.updateLngAndLatBySenciSpotID(messageVo.getId(), (Double) result.get("lng"), (Double) result.get("lat"));
}else {
System.out.println("message-------------------------------False");
}
return false;
}
3 問題描述
前端呼叫addScenicSpot() 方法,會將資訊儲存到資料庫中,然後將儲存之後的資料控中的ID傳送到訊息佇列中,然後訂閱者處理佇列中的信息,根據ID 查詢到剛儲存的訊息,然後呼叫外部介面查詢到經緯度,並將得到的經緯度儲存到資料庫中。
現在的問題是,保存資訊正常,但是到了訂閱者處理這邊,根據得到的 ID 查找不到保存的資訊。
4 猜測問題所在
產生bug的原因是spring事務提交晚於訊息佇列的生產訊息,導致訊息佇列消費訊息時所獲得的資料不正確,
靈感來自這裡:http://www.cnblogs.com/ taocon...
Your Answer
2 個答案
Hot Questions
function_exists()無法判定自訂函數
2024-04-29 11:01:01
google 瀏覽器 手機版顯示的怎麼實現
2024-04-23 00:22:19
子窗口操作父窗口,輸出沒反應
2024-04-19 15:37:47
父視窗沒有輸出
2024-04-18 23:52:34
關於CSS心智圖的課件在哪?
2024-04-16 10:10:18
Hot Tools
vc9-vc14(32+64位元)運行庫合集(連結在下方)
phpStudy安裝所需運行函式庫集合下載
VC9 32位
VC9 32位元 phpstudy整合安裝環境運行庫
php程式設計師工具箱完整版
程式設計師工具箱 v1.0 php整合環境
VC11 32位
VC11 32位元 phpstudy整合安裝環境運行庫
SublimeText3漢化版
中文版,非常好用
熱門話題
抖音等級價目表1-75
20334
7
20334
7
wifi顯示無ip分配
13530
4
13530
4
虛擬手機號碼接收驗證碼
11850
4
11850
4
gmail信箱登陸入口在哪裡
8835
17
8835
17
windows安全中心怎麼關閉
8419
7
8419
7
熱門文章
2025年加密貨幣市場十大趨勢預測:下一個風口在哪裡?
2025-11-07
By DDD
幣圈土狗項目如何識別?避免歸零幣的陷阱與風險預警
2025-11-07
By DDD
win10字體安裝後在軟件裡找不到怎麼辦_win10字體安裝與識別方法
2025-11-07
By DDD
高效處理PHP表單中動態數量的問答數據更新
2025-11-07
By DDD
如何從 USB 啟動 Windows 10:初學者指南
2025-11-07
By DDD





