import java.util.Properties;
import javax.jms.Message;
import javax.jms.MessageListener;
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.jms.TopicSubscriber;
import javax.naming.InitialContext;
import java.io.*;
/**
* TODO 在此写上类的相关说明.<br>
* @author gongqiang <br>
* @version 1.0.0 2021年10月19日<br>
* @see
* @since JDK 1.5.0
*/
public class Chat implements MessageListener {
private TopicSession pubSession;
private TopicPublisher publisher;
private TopicConnection connection;
private String username;
public Chat(String topicFactory, String topicName, String userName) {
try {
Properties env = new Properties();
env.put("java.naming.factory.initial", "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
env.put("java.naming.provider.url", "tcp://127.0.0.1:61616");
env.put("java.naming.security.principal", "system");
env.put("java.naming.security.credentials", "manager");
env.put("connectionFactoryNames", "TopicCF");
env.put("topic.topic1", "jms.topic1");
InitialContext ctx = new InitialContext(env);
// 查找一个JMS连接工厂并创建连接.
TopicConnectionFactory connFactory =
(TopicConnectionFactory)ctx.lookup(topicFactory);
TopicConnection conn = connFactory.createTopicConnection();
// 创建两个JMS会话对象.
TopicSession pubSession = conn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
TopicSession subSession = conn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
// 查找一个JMS主题.
Topic chatTopic = (Topic) ctx.lookup(topicName);
// 创建一个JMS发布者和订阅者.
// createSubscriber 中附加的参数是一个消息选择器(null)和noLocal 标记的真值,
// 它表明这个发布者生产的消息不应被它自己所消费.
TopicPublisher publisher = pubSession.createPublisher(chatTopic);
TopicSubscriber subscriber = subSession.createSubscriber(chatTopic, null, false);
// 设置一个JMS 消息监听器.
subscriber.setMessageListener(this);
// 初始化Chat 应用程序变量.
this.connection = conn;
this.pubSession = pubSession;
this.publisher = publisher;
this.username = userName;
// 启动JMS 连接,允许传送消息.
conn.start();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
try {
Chat chat = new Chat("TopicCF", "topic1", "username");
// 从命令行读取.
BufferedReader commandLine =
new BufferedReader(new InputStreamReader(System.in));
// 循环,直到键入exit
while (true) {
String s = commandLine.readLine();
if ("exit".equalsIgnoreCase(s)) {
chat.clone();
System.exit(0);
} else {
chat.writeMessage(s);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* {@inheritDoc}
* @see javax.jms.MessageListener#onMessage(javax.jms.Message)
*/
@Override
public void onMessage(Message message) {
try {
TextMessage text = (TextMessage)message;
System.out.println("onMessage--->" + text.getText());
// 测试异常后,是否还能接受.
Integer i = Integer.valueOf(text.getText());
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
protected void writeMessage(String text) {
try {
TextMessage message = pubSession.createTextMessage();
message.setText(text);
publisher.publish(message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Java消息服务~ 一个简单的示例
最新推荐文章于 2023-12-10 22:59:18 发布