activemq是每一位運維工作人員必須掌握的一款軟體,他是公司執行的命脈之一,既然如此重要,那麼它的看門狗也是比較含金量的。activemq的看門狗不是像那種# ps -ef|grep mq看程序或者#netstat -ntpl|grep 61613這樣直白,因為activemq還有一種假死情況,那就是「程序和埠都在,但是佇列已經死掉了」,遇到這種情況就必須重啟當前的activemq。
那麼要寫出這樣的乙個指令碼,需要滿足以下條件:
1)因為mq是集群,有主備之分,首先我們先在集群裡所有的機器61613埠是否監聽;
2)如果只有一台機器61613埠正常,往mq裡新增資訊,如果資訊可以成功新增到對應的佇列裡,那麼可以證明mq是正常的;
3)如果有多台61613埠正常,重啟所有的集群mq機器;
4)如果是零颱61613埠正常,也重啟所有的集群mq機器;
以上就是我們mq看門狗指令碼的邏輯思路,這裡我們用python語言來寫,為什麼要用python,因為python有乙個stomp模組,這個模組是鎮服activemq失靈的不二法寶!
,然後就看見如下文字可以證明stomp已經安裝成功了:
然後我們來寫乙個簡單的測試佇列的指令碼,指令碼內容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@zabbix ~]
# cat mqtest.py
import
time
import
sys
import
stomp
class mylistener(object):
def on_error(self, headers, message):
print(
'received an error %s'
% message)
def on_message(self, headers, message):
print(
'received a message %s'
% message)
conn = stomp.connection([(
'mq的內網ip位址'
,61613)])
conn.set_listener(
''
, mylistener())
conn.start()
conn.connect(
'mq的賬號'
,
'mq的密碼'
)
conn.subscribe(destination=
'/queue/chenshuo'
,
id
=1, ack=
'auto'
)
conn.send(body=
'hello,this is my test message!'
, destination=
'/queue/chenshuo'
)
time
.
sleep
(2)
conn.disconnect()
在這個指令碼裡,我們把mq的內網位址作為連線位址,因為這樣做很安全,其次我們建立乙個叫「chenshuo」的佇列,這個佇列裡傳輸乙個訊息,訊息的內容就是
1
hello,this is my
test
message!
啟動一下這個指令碼,我們看一下linux端的效果。
如果mq沒有啟動或者61613埠沒有監聽的話,那麼指令碼的反饋是這樣的:
再看一下web介面:
可見已經生成了chenshuo這個佇列,而且入列和出列的訊息數是3個(因為我之前傳遞了兩個做實驗),上面這個指令碼是成功的。
可以看出,這三個訊息已經被消費了,雖然沒有「消費者」但是他們依舊處於dequeued狀態。
下面就可以用python把整個這個指令碼實現出來。
注意!如果執行的時候爆出「no handlers could be found for logger "stomp.py"」的錯誤,去檢查一下ip位址是否正確、mq密碼是否正確、61613埠是否存在,如果61613埠沒有在監聽,檢查一下activemq.xml裡,下面這句話是不是被乾掉了。
1
jvm判斷物件存活
我們在編碼的過程當中,堆的空間的利用率是有限制的,假設我們的堆空間已經快要觸發gc,那麼大家有沒有想過,gc進行 的時候,到底哪一類的物件才能被 的標準是那些,好的,廢話不多,直接開始 引用計數法 可達性分析演算法 根搜尋法gs roots演算法 引用計數法的圖例如下 給物件中新增乙個引用計數器,每...
ActiveMQ訊息佇列
這個東西沒接觸到的時候挺懵的,用過一次之後,哇哦 public class producter catch jm ception e public void sendmessage string disname,listlist else thread.sleep 1000 int num coun...
activeMQ訊息佇列
session.auto acknowledge。當客戶成功的從receive 方法返回的時候,或者從messagelistener.onmessage方法成功返回的時候,會話自動確認客戶收到的訊息。session.client acknowledge。客戶通過訊息的 acknowledge 方法確...