간단한 EJB3 메시지 구동 Bean
Topic
Queue
개요
Publish Subscribe 메시지 게시 구독 메시지
Point-to-Point 점 대 점
유무상태
topic 데이터는 기본적으로 땅에 떨어지지 않고 무상태입니다.
Queue 데이터는 기본적으로 mq 서버에 파일 형식으로 저장됩니다. 예를 들어Active MQ는 $AMQ 에 저장됩니다.HOME\data\kr-store\data 아래DB 스토리지로 구성할 수도 있습니다.
무결성 보장
publisher가 발표한 모든 데이터를 Subscriber가 받아들일 수 있다는 보장은 없습니다.
Queue는 모든 데이터를 Receiver에서 수신할 수 있도록 보장합니다.
메시지 손실 여부
일반적으로publisher가 어떤 topic에 메시지를 발표할 때 이 topic 주소를 감청하고 있는sub만 메시지를 받을 수 있다.만약 Sub가 감청하고 있지 않다면, 이 topic는 잃어버릴 것이다.
Sender는 대상Queue에 메시지를 보내고receiver는 이Queue의 메시지를 비동기적으로 받을 수 있습니다.Queue에 있는 메시지는 리커버리가 가져오지 않으면 잃어버리지 않습니다.
메시지 게시 수신 정책
한 쌍의 많은 메시지가 수신 정책을 발표하고 같은 topic 주소의 여러sub를 감청하면publisher가 보낸 메시지를 받을 수 있습니다.Sub 알림 수신 완료 mq 서버
일대일 메시지 발표 수신 정책, 한sender가 보낸 메시지,receiver만 수신할 수 있습니다.receiver가 수신된 후 mq 서버가 수신했음을 알립니다. mq 서버는queue의 메시지를 삭제하거나 다른 조작을 합니다.
Queue
게시Queue는 jboss 디렉터리에 배치된 기본 서버 jboss-4.2.3입니다.GA\server\default\deploy
파일 이름은 파일 이름 - 서비스여야 합니다.xml 형식
<?xml version="1.0" encoding="UTF-8"?>
<server>
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.mq.destination:service=Queue,name=leamQueue">
<attribute name="JNDIName">queue/leamQueue</attribute>
<depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager
</depends>
</mbean>
</server>
게시에 성공하면 jboss 웹 제어 페이지/jmx-console/Html Adaptor에서 발표된 이름을 볼 수 있습니다
+- queue (class: org.jnp.interfaces.NamingContext)
| +- A (class: org.jboss.mq.SpyQueue)
| +- testQueue (class: org.jboss.mq.SpyQueue)
| +- ex (class: org.jboss.mq.SpyQueue)
| +- leamQueue (class: org.jboss.mq.SpyQueue)
새 클래스Queue 메시지 보내기
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
InitialContext ctx=new InitialContext();
QueueConnectionFactory factory=
(QueueConnectionFactory)ctx.lookup("QueueConnectionFactory");
QueueConnection conn=factory.createQueueConnection();
QueueSession session=
conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
Destination destination=(Destination)ctx.lookup("queue/leamQueue");
MessageProducer prd=session.createProducer(destination);
prd.send(session.createTextMessage(" leam queue "));
session.close();
conn.close();
System.out.println(" ");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
보내는 Queue 메시지 가져오기 설정
jndi.properties 파일 내용
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.provider.url=localhost:1099
새 클래스 가져오기Queue 메시지
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination",
propertyValue = "queue/leamQueue") })
public class MessageDriverBean implements MessageListener {
public void onMessage(Message message) {
TextMessage txtmsg=(TextMessage)message;
try {
System.out.print(txtmsg.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
모든 코드를 다 쓴 후에 jar을 포장하여 jboss 출력에 발표합니다
leam queue
게시 Topic은 jboss 디렉터리에 배치되어 기본 서버 jboss-4.2.3입니다.GA\server\default\deploy
<?xml version="1.0" encoding="UTF-8"?>
<server>
<mbean code="org.jboss.mq.server.jmx.Topic"
name="jboss.mq.destination:service=Topic,name=leamTopic">
<attribute name="JNDIName">topic/leamTopic</attribute>
<depends
optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager
</depends>
</mbean>
</server>
게시에 성공하면 jboss 웹 제어 페이지/jmx-console/Html Adaptor에서 발표된 이름을 볼 수 있습니다
+- topic (class: org.jnp.interfaces.NamingContext)
| +- testDurableTopic (class: org.jboss.mq.SpyTopic)
| +- testTopic (class: org.jboss.mq.SpyTopic)
| +- securedTopic (class: org.jboss.mq.SpyTopic)
| +- leamTopic (class: org.jboss.mq.SpyTopic)
새 클래스에서 Topic 메시지 보내기
public class TopicSender {
/**
* @param args
*/
public static void main(String[] args) {
try {
InitialContext ctx=new InitialContext();
TopicConnectionFactory factory=
(TopicConnectionFactory)ctx.lookup("TopicConnectionFactory");
TopicConnection conn=factory.createTopicConnection();
TopicSession session=
conn.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);
Destination destination=(Destination)ctx.lookup("topic/leamTopic");
MessageProducer prd=session.createProducer(destination);
prd.send(session.createTextMessage(" leam topic "));
session.close();
conn.close();
System.out.println(" ");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
새 클래스에서 Topic 메시지 가져오기
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Topic"),
@ActivationConfigProperty(propertyName = "destination",
propertyValue = "topic/leamTopic") })
public class ReceiveBean implements MessageListener {
public void onMessage(Message message) {
TextMessage txtmsg=(TextMessage)message;
try {
System.out.print(this.getClass()+txtmsg.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단한 EJB3 메시지 구동 BeanJms 사양의 두 가지 메시지 전송 방식인 Topic 및 Queue는 다음 표()와 비교됩니다. Topic Publish Subscribe 메시지 게시 구독 메시지 topic 데이터는 기본적으로 땅에 떨어지지 않고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.