JMS接続ランタイムmbeanには“getHostAddress”というメソッドがあり、接続しているクライアントJVMのホストアドレスを文字列で返す。
接続ランタイムにはセッションランタイムを収容できる。セッションランタイムは同様にコンシューマランタイムを収容できる。コンシューマランタイムは、同様に“getDestinationName” と“getMemberDestinationName”というメソッドを持っている。つまり、WSLTスクリプトを作成して、例えばすべてのコンシューマ、送り先に加えて、親セッションの親の接続ホストアドレスをダンプすることができるということだと思う。
クライアントランタイムmbeans(接続、セッション、コンシューマ)は必ずしも同じクラスタ内の宛先と同じJVM上でホストされないことに注意する必要がある(その接続のホストから同じクラスタ内の最終的な宛先へのクライアントメッセージの経路)。
スクリプトの作成
したがって、この情報で武装し、WLSTスクリプトで実現可能か、試すことにしました。このような活動にはWebLogic Server MBeanリファレンスが手元にあると重宝します。
これは、JMSコンシューマに焦点を当て、入手可能な情報のサブセットしか取得しませんでしたが、プロデューサに焦点を当てるために変更することも簡単でした。それほど複雑な環境でテストしていませんが、単純なサンドボックスでは動作しましたので一般的アイデアとしてとらえて下さい。
# Better to use Secure Config File approach for login as shown here http://buttso.blogspot.com/2011/02/using-secure-config-files-with-weblogic.html出力例
connect('weblogic','welcome1','t3://localhost:7001')
# Navigate to the Server Runtime and get the Server Name
serverRuntime()
serverName = cmo.getName()
# Multiple JMS Servers could be hosted by a single WLS server
cd('JMSRuntime/' + serverName + '.jms' )
jmsServers=cmo.getJMSServers()
# Find the list of all JMSServers for this server
namesOfJMSServers = ''
for jmsServer in jmsServers:
namesOfJMSServers = jmsServer.getName() + ' '
# Count the number of connections
jmsConnections=cmo.getConnections()
print str(len(jmsConnections)) + ' JMS Connections found for ' + serverName + ' with JMSServers ' + namesOfJMSServers
# Recurse the MBean tree for each connection and pull out some information about consumers
for jmsConnection in jmsConnections:
try:
print 'JMS Connection:'
print ' Host Address = ' + jmsConnection.getHostAddress()
print ' ClientID = ' + str( jmsConnection.getClientID() )
print ' Sessions Current = ' + str( jmsConnection.getSessionsCurrentCount() )
jmsSessions = jmsConnection.getSessions()
for jmsSession in jmsSessions:
jmsConsumers = jmsSession.getConsumers()
for jmsConsumer in jmsConsumers:
print ' Consumer:'
print ' Name = ' + jmsConsumer.getName()
print ' Messages Received = ' + str(jmsConsumer.getMessagesReceivedCount())
print ' Member Destination Name = ' + jmsConsumer.getMemberDestinationName()
except:
print 'Error retrieving JMS Consumer Information'
dumpStack()
# Cleanup
disconnect()
exit()
このような感じですべての接続にわたって繰り返して表示します。以下は最初の接続です。
1 JMS Connections found for AdminServer with JMSServers myJMSServerクライアントのIPアドレスがわかることに着目して下さい。16個の接続をデフォルトで使用するMDBを使っているので、16セッション開いています。表示全体は以下のようになっています。
JMS Connection:
Host Address = 127.0.0.1
ClientID = None
Sessions Current = 16
Consumer:
Name = consumer40
Messages Received = 1
Member Destination Name = myJMSModule!myQueue
D:\Oracle\fmw11gr1ps3\user_projects\domains\offline_domain>java weblogic.WLST d:\temp\jms.pyヒントをくれたTom Barnesに感謝します。
Initializing WebLogic Scripting Tool (WLST) ...
Welcome to WebLogic Server Administration Scripting Shell
Type help() for help on available commands
Connecting to t3://localhost:7001 with userid weblogic ...
Successfully connected to Admin Server 'AdminServer' that belongs to domain 'offline_domain'.
Warning: An insecure protocol was used to connect to the
server. To ensure on-the-wire security, the SSL port or
Admin port should be used instead.
Location changed to serverRuntime tree. This is a read-only tree with ServerRuntimeMBean as the root.
For more help, use help(serverRuntime)
1 JMS Connections found for AdminServer with JMSServers myJMSServer
JMS Connection:
Host Address = 127.0.0.1
ClientID = None
Sessions Current = 16
Consumer:
Name = consumer40
Messages Received = 2
Member Destination Name = myJMSModule!myQueue
Consumer:
Name = consumer34
Messages Received = 2
Member Destination Name = myJMSModule!myQueue
Consumer:
Name = consumer37
Messages Received = 2
Member Destination Name = myJMSModule!myQueue
Consumer:
Name = consumer16
Messages Received = 2
Member Destination Name = myJMSModule!myQueue
Consumer:
Name = consumer46
Messages Received = 2
Member Destination Name = myJMSModule!myQueue
Consumer:
Name = consumer49
Messages Received = 2
Member Destination Name = myJMSModule!myQueue
Consumer:
Name = consumer43
Messages Received = 1
Member Destination Name = myJMSModule!myQueue
Consumer:
Name = consumer55
Messages Received = 1
Member Destination Name = myJMSModule!myQueue
Consumer:
Name = consumer25
Messages Received = 1
Member Destination Name = myJMSModule!myQueue
Consumer:
Name = consumer22
Messages Received = 1
Member Destination Name = myJMSModule!myQueue
Consumer:
Name = consumer19
Messages Received = 1
Member Destination Name = myJMSModule!myQueue
Consumer:
Name = consumer52
Messages Received = 1
Member Destination Name = myJMSModule!myQueue
Consumer:
Name = consumer31
Messages Received = 1
Member Destination Name = myJMSModule!myQueue
Consumer:
Name = consumer58
Messages Received = 1
Member Destination Name = myJMSModule!myQueue
Consumer:
Name = consumer28
Messages Received = 1
Member Destination Name = myJMSModule!myQueue
Consumer:
Name = consumer61
Messages Received = 1
Member Destination Name = myJMSModule!myQueue
Disconnected from weblogic server: AdminServer
Exiting WebLogic Scripting Tool.
原文はこちら。
http://blogs.oracle.com/jamesbayer/entry/weblogic_server_jms_wlst_script
0 件のコメント:
コメントを投稿