알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)

Spring MVC Active mq 예제 example 본문

Web

Spring MVC Active mq 예제 example

백곳 2018. 11. 14. 10:11

Spring ActiveMq 예제



Spring 사용시 AciteveMq 을 사용할 일이 있어서 사용 예제를 분석 하고 남기려고 합니다.


먼저 dependency 는

        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-spring</artifactId>
            <version>5.10.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>4.1.5.RELEASE</version>
        </dependency>


이 2가지 입니다.



그리고 Bean 은 여기에 등록 합니다.


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:amq="http://activemq.apache.org/schema/core"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
    xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
        http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
        http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">


위에 해당 하는 부분 스키마를 등록해 줍니다.



    <bean id="OEEconnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
         <property name="brokerURL">
             <value>tcp://127.0.0.1:61616</value>
         </property>
     </bean>
     
     <bean id="OEEjmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
        <property name="connectionFactory" ref="OEEconnectionFactory"/>
    </bean>


먼저 위에 소스에서 보듯 커넥터를 만들어 줍니다.


    <bean id="OEEqueueDestination" class="org.apache.activemq.command.ActiveMQQueue">
        <constructor-arg value="dbin.queue"/>
    </bean>


그리고 기본으로 사용할 Queue Subject Bean 을 만들어 줍니다.


그리고 나서 MessageConverter 가 필요합니다.

public class OEEActivemqMsgConverterImpl implements MessageConverter {

    @Override
    public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException {
        // TODO Auto-generated method stub

        return null;
    }

    @Override
    public Object fromMessage(Message message) throws JMSException, MessageConversionException {
        // TODO Auto-generated method stub
        return null;
    }

}


일단 MessageConverter 에서 toMessage(Object object, Session session) Send 할때 해당 메소드를 타는데


해당 메소드는 추후에  JmsTemplate 객체에서 convertAndSend(Object) 를 사용할때 타고 들어가게 됩니다.


그러니 Obejct로 사용할 객체를 만들어 줍니다.


public class OEEStateMqMessage {
    String MachineCode;
    String State;
    public String getMachineCode() {
        return MachineCode;
    }
    public void setMachineCode(String machineCode) {
        MachineCode = machineCode;
    }
    public String getState() {
        return State;
    }
    public void setState(String state) {
        State = state;
    }
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "MachineCode"+MachineCode;
    }
   
}




그리고 나서 일단 다시


<bean id="OEEmsgConverter" class="co.kr.wisol.webmms.dao.OEEActivemqMsgConverterImpl"/>


Converter 를 Bean을 생성한 뒤에


    <bean id="OEEproducerJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="OEEjmsFactory"/>
        <property name="defaultDestination" ref="OEEqueueDestination"/>
        <property name="messageConverter" ref="OEEmsgConverter"/>
      </bean>


위와 같이 JmsTemplate 을 생성해 줍니다.


public class webmmsDAOImpl implements webmmsDAO {

    @Resource(name = "OEEproducerJmsTemplate")
    JmsTemplate OEEmqProducer;


    @Override
    public void updateOIMachineState(HttpServletRequest request, HttpServletResponse response) throws Exception {
        // TODO Auto-generated method stub
        response.setContentType("text/plain");
        response.setCharacterEncoding("UTF-8");
        OEEStateMqMessage msg = new OEEStateMqMessage();
        msg.setMachineCode("TESTCODE");
       
        OEEmqProducer.convertAndSend(msg);
       
       
        response.getWriter().print("done");   
       
    }


}


그리고 아래와 같이 TextMessge 보내주기 위한 코드를 작성 합니다.
OEEmqProducer.convertAndSend(msg);->OEEActivemqMsgConverterImpl의 toMessage 로 함수 Callback 이 이루어 집니다.

public class OEEActivemqMsgConverterImpl implements MessageConverter {

    @Override
    public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException {
        // TODO Auto-generated method stub
        if(object instanceof OEEStateMqMessage) {
            OEEStateMqMessage msg = (OEEStateMqMessage)object;
            TextMessage sendmsg = session.createTextMessage(msg.toString());
            return sendmsg;
        }
       
        return null;
    }

    @Override
    public Object fromMessage(Message message) throws JMSException, MessageConversionException {
        // TODO Auto-generated method stub
        return null;
    }

}

그러면 TextMessge 로 메세지를 보내게 됩니다.



Comments