SpringのJmsTemplateを使ってActiveMQにキューイング

先日、TomcatでActiveMQを動かしてみる(http://shinodogg.com/?p=3593)というエントリで、 普通のJavaアプリケーションからTomcat上のActiveMQにキューイングしてみましたが、 今回はSpringの便利機能的なオブジェクトを使って、 SpringMVCのWebアプリケーションからActiveMQにキューイングしてみます。   ■ Bean定義ファイル ActiveMQへのコネクションファクトリと、 そのファクトリを使ってコネクション取得して、 そっからアレやコレややってくれるTemplateクラスをXMLに定義します。 #ref=のところをvalue=にしちゃって、IllegalStateExceptionで #Cannot convert value of typeとかあるよね~w

    <beans:bean id="jmsFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <beans:property name="brokerURL" value="tcp://localhost:61616" />
    </beans:bean>

    <beans:bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <beans:property name="connectionFactory" ref="jmsFactory" />
        <beans:property name="defaultDestinationName" value="TestQueue" />
    </beans:bean>

  ■ コントローラー コントローラーでやらせるかどうか?ってのはありますが、 こんだけでイイってのは楽チンですね。

@Autowired
private JmsTemplate jmsTemplate;
~略~
@RequestMapping(value = "/hoge", method = RequestMethod.POST)
public String regist(@ModelAttribute Hoge hoge, Locale locale, Model model) throws JMSException {
   // ホントは引数でもらったHogeオブジェクトをほげほげするところだけどw
   // とりあえず今回は単なる文字列で…
   jmsTemplate.convertAndSend("hoge");

   return "hoge";
}

  ■ MQからデータを取得するバッチ イイ感じにhogeTomcat上のActiveMQから取れました。

194 [ActiveMQ Task-1] INFO org.apache.activemq.transport.failover.FailoverTransport - Successfully connected to tcp://localhost:61616
hoge

一応MQから取得するコードも載せますが、こいつはゆくゆくSpringBatchにして 毎分のcron起動にする予定です。

//Connectionを作成するFactoryを作成
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_BROKER_URL);
QueueConnection connection = factory.createQueueConnection();

//セッションの作成
QueueSession session = connection.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("TestQueue");

//Queueと関連付け
QueueReceiver receiver = session.createReceiver(queue);

connection.start();

//メッセージの受信
TextMessage msg = (TextMessage) receiver.receive();
System.out.println(msg.getText());

receiver.close();
session.close();
connection.close();

 

マスタリングJavaEE5 第2版 (DVD付) (Programmer’s SELECTION)
三菱UFJインフォメーションテクノロジー株式会社 斉藤 賢哉
翔泳社
売り上げランキング: 153069