Activemq判斷佇列存活指令碼 一

2021-09-21 05:26:00 字數 3186 閱讀 5791

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

importtime

importsys

importstomp

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 mytestmessage!

啟動一下這個指令碼,我們看一下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 方法確...