JMS 시리즈(3)-자바 조작 JMS Topic 인 스 턴 스
소식 발표
마찬가지 로 메 시 지 를 주제 에 발표 하려 면 다음 과 같은 절 차 를 거 쳐 야 한다.
package asan.demo.jms;
import java.util.Hashtable;
import javax.jms.JMSException;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicPublisher;
import javax.jms.TopicSession;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class JMSTopicSender {
private TopicPublisher sender = null;
private TopicSession session = null;
private static final String JMS_FACTORY_JNDI = "jms/jms_test_connection_factory1";
private static final String JMS_TOPIC_JNDI = "jms/jms_test_topic";
public JMSTopicSender() {
super();
}
public void sendMessage(String msg) {
TextMessage textMsg;
try {
if (this.sender == null) {
this.init();
}
textMsg = session.createTextMessage();
textMsg.setText(msg);
sender.send(textMsg);
} catch (JMSException e) {
e.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}
}
// 1. jms
// 2. (Connection Factory)
// 3. (TopicConnection)
// 4. (TopicSession)
// 5. (Publisher)
// 6. (Message)
// 7.
private void init() throws NamingException, JMSException {
Hashtable properties = new Hashtable();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, "t3://127.0.0.1:7101");
properties.put(Context.SECURITY_PRINCIPAL, "weblogic");
properties.put(Context.SECURITY_CREDENTIALS, "weblogic1");
InitialContext ctx = new InitialContext(properties);
TopicConnectionFactory jmsFactory =
(TopicConnectionFactory)ctx.lookup(JMS_FACTORY_JNDI);
TopicConnection jmsConn = jmsFactory.createTopicConnection();
session = jmsConn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = (Topic)ctx.lookup(JMS_TOPIC_JNDI);
sender = session.createPublisher(topic);
}
public static void main(String[]cmd){
JMSTopicSender sender=new JMSTopicSender();
sender.sendMessage("hello jms topic");
}
}
대기 열 과 달리 이 때 테마 에 구독 자가 없 으 면 이 메 시 지 는 테마 에 저장 되 지 않 고 뒤에 구독 자가 이 테 마 를 구독 하 더 라 도 구독 전 메 시 지 를 받 을 수 없습니다.
메시지 구독
주제 에서 정 보 를 구독 하려 면 다음 절 차 를 거 쳐 야 합 니 다.
package asan.demo.jms;
import java.util.Hashtable;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicSession;
import javax.jms.TopicSubscriber;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class JMSTopicReciver {
private TopicSubscriber reciver = null;
private static final String JMS_FACTORY_JNDI = "jms/jms_test_connection_factory1";
private static final String JMS_TOPIC_JNDI = "jms/jms_test_topic";
public JMSTopicReciver() {
super();
}
public void reciveMessage() {
try {
if (this.reciver == null) {
this.init();
}
System.out.println("waiting to recive message from jms topic "+JMS_TOPIC_JNDI);
while(true){
Message msg=reciver.receive();
if(msg instanceof TextMessage){
TextMessage textMsg=(TextMessage)msg;
System.out.println("recive jms message:"+textMsg.getText());
}
}
} catch (JMSException e) {
e.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}
}
// 1. jms
// 2. (Connection Factory)
// 3. (TopicConnection)
// 4. (TopicSession)
// 5. (Subscriber)
// 6. (Message)
private void init() throws NamingException, JMSException {
Hashtable properties = new Hashtable();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, "t3://127.0.0.1:7101");
properties.put(Context.SECURITY_PRINCIPAL, "weblogic");
properties.put(Context.SECURITY_CREDENTIALS, "weblogic1");
InitialContext ctx = new InitialContext(properties);
TopicConnectionFactory jmsFactory =
(TopicConnectionFactory)ctx.lookup(JMS_FACTORY_JNDI);
TopicConnection jmsConn = jmsFactory.createTopicConnection();
TopicSession session = jmsConn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = (Topic)ctx.lookup(JMS_TOPIC_JNDI);
reciver = session.createSubscriber(topic);
jmsConn.start();
}
public static void main(String[]cmd){
JMSTopicReciver consumer=new JMSTopicReciver();
consumer.reciveMessage();
}
}
코드 를 실행 합 니 다.이 때 실행 하기 전에 메시지 가 발 표 된 코드 는 콘 솔 에서 보 낸 메 시 지 를 볼 수 있 습 니 다.
마찬가지 로 다음 글 의 클 라 이언 트 프로그램 을 약간 수정 하여 전체 과정 을 더욱 선명 하 게 보이 게 합 니 다.수 정 된 클 라 이언 트 코드 는 다음 과 같 습 니 다.
package asan.demo.jms;
import java.util.Scanner;
public class JMSClient {
public JMSClient() {
super();
}
public static void help() {
System.out.println("Usage:java -jar JMSClient.jar sender/reciver/topicSender/topicReciver");
System.out.println("sender: jms ");
System.out.println("reciver: ");
System.out.println("topicSender: jms ");
System.out.println("topicReciver: ");
}
public static void main(String[] cmd) {
if (cmd.length == 0) {
help();
return;
}
String mode = cmd[0];
if ("sender".equalsIgnoreCase(mode)) {
JMSSender sender = new JMSSender();
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("input you message(input end to exist):");
String msg = sc.nextLine();
if ("end".equalsIgnoreCase(msg)) {
return;
}
sender.sendMessage(msg);
System.out.println("message send success");
}
} else if ("reciver".equalsIgnoreCase(mode)) {
JMSReciver consumer = new JMSReciver();
consumer.reciveMessage();
} else if ("topicSender".equalsIgnoreCase(mode)) {
JMSTopicSender sender = new JMSTopicSender();
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("input you message(input end to exist):");
String msg = sc.nextLine();
if ("end".equalsIgnoreCase(msg)) {
return;
}
sender.sendMessage(msg);
System.out.println("message send success");
}
} else if ("topicReciver".equalsIgnoreCase(mode)) {
JMSTopicReciver consumer = new JMSTopicReciver();
consumer.reciveMessage();
}
}
}
패키지 실행,다음 명령 을 실행 하여 클 라 이언 트 를 테마 발표 자로 합 니 다.
java -jar JMSDemo.jar topicSender
새 창,다음 명령 을 실행 하여 클 라 이언 트 를 테마 구독 자로 합 니 다.
java -jar JMSDemo.jar topicReciver
게시 자 에 게 메 시 지 를 보 내 고 구독 자 에 게 받 은 메 시 지 를 보 았 습 니 다.
창 을 하나 더 열 고 구독 자 를 실행 할 수 있 습 니 다.
웹 logic 콘 솔 에 로그 인하 여
domain->Services->Messaging->JMS Modules->jms_test_module->jms_test_topic
들 어가 면 현재 테마 구독 통계 정 보 를 볼 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
실효 연결의 검측만약 상술한 상황이 발생한다면, 이 자원들은 서버에 남아 정리되지 않을 것이다.이것은 자원 유출 현상을 초래하고 최종적으로 서버 메모리가 넘치거나 다른 자원의 넘침 오류를 초래할 수 있다. 따라서 서버에서는 자원의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.