LibertyとActiveMQを連携する備忘録
前提
- Mac OS X
- WebSphere Liberty
準備
ActiveMQ
のインストール
brew install apache-activemq
ActiveMQの起動
/usr/local/Cellar/activemq/{version}/bin/activemq start
http://localhost:8161
へアクセスすると管理画面が表示されます
Manage ActiveMQ broker をクリックすると認証を求められますので「admin/admin」と入力すると次の画面に遷移します
メッセージ送受信プログラムの作成
Queueの送信プログラム
import java.io.IOException;
import java.io.PrintWriter;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.TextMessage;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/test")
public class SenderQueue extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
sendMessage(request, response);
} catch (Exception e) {
e.printStackTrace();
return;
}
}
public void sendMessage(HttpServletRequest request,
HttpServletResponse response) throws Exception {
PrintWriter out = response.getWriter();
QueueConnectionFactory cf1 = (QueueConnectionFactory) new InitialContext().lookup("java:comp/env/jndi_JMS_BASE_QCF");
Queue queue = (Queue) new InitialContext().lookup("java:comp/env/jndi/MDBQ");
QueueConnection con = cf1.createQueueConnection();
con.start();
QueueSession sessionSender = con.createQueueSession(false,
javax.jms.Session.AUTO_ACKNOWLEDGE);
QueueSender send = sessionSender.createSender(queue);
TextMessage msg = sessionSender.createTextMessage();
msg.setStringProperty("COLOR", "RED");
msg.setText("Liberty Sample Message");
send.send(msg);
if (con != null)
con.close();
out.println("SendMessage Completed");
}
}
Queueの受信プログラム
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.MessageDriven;
import javax.ejb.MessageDrivenContext;
import javax.jms.Message;
import javax.jms.MessageListener;
@MessageDriven
public class ReceiverQueue implements MessageListener{
@Resource
MessageDrivenContext ejbcontext;
@PostConstruct
public void postConstruct() {
}
@Override
public void onMessage(Message message) {
try {
System.out.println("Message Received in MDB" + message);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
Liberty server.xmlの設定
リソースアダプターの設定
<resourceAdapter id="activemq" location="/your local directory/activemq-rar-5.13.1.rar">
<properties.activemq serverUrl="tcp://localhost:61616" />
</resourceAdapter>
MDBの接続設定
<jmsActivationSpec id="sample/SampleJMS">
<properties.activemq destinationRef="MDBQ" destinationType="javax.jms.Queue"/>
</jmsActivationSpec>
<jmsQueue id="MDBQ" jndiName="jndi/MDBQ">
<properties.activemq physicalName="MDBQ"/>
</jmsQueue>
接続ファクトリーの設定
<jmsQueueConnectionFactory connectionManagerRef="ConMgr6" jndiName="jndi_JMS_BASE_QCF">
<properties.activemq serverUrl="tcp://localhost:61616" />
</jmsQueueConnectionFactory>
アプリの起動
先ほどの送受信プログラムのwarプロジェクトをサーバーにaddして
起動します
設定したサーブレットへアクセスしSendMessage Completed
が表示されたら成功です
ActiveMqの確認
管理画面の Queues
を確認すると MDBQ
という Queue
が作成されて
Messages Enqueued
と Message Dequeued
が 1
になっているのがわかります
Author And Source
この問題について(LibertyとActiveMQを連携する備忘録), 我々は、より多くの情報をここで見つけました https://qiita.com/enzen/items/23bbf026a84b7cfe4f11著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .