我想要在JMS接收到消息的时候告诉接收端已经接收到消息应该怎么做?
1条回答 默认 最新
- 我不懂电脑 2015-06-15 03:07关注
这是你自己定义个通信协议的事,收到消息后向消息生产者发送自定义的收到消息就可以了,jms消息使用用下面代码实现
1、消息发送Java代码 复制代码
//连接工厂
ConnectionFactory connFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://localhost:61616");//连接到JMS提供者
Connection conn = connFactory.createConnection();
conn.start();//事务性会话,自动确认消息
Session session = conn.createSession(true, Session.AUTO_ACKNOWLEDGE);//消息的目的地
Destination destination = session.createQueue("queue.hello");//消息生产者
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); //不持久化//文本消息
TextMessage textMessage = session.createTextMessage("文本消息");
producer.send(textMessage);//键值对消息
MapMessage mapMessage = session.createMapMessage();
mapMessage.setLong("age", new Long(32));
mapMessage.setDouble("sarray", new Double(5867.15));
mapMessage.setString("username", "键值对消息");
producer.send(mapMessage);//流消息
StreamMessage streamMessage = session.createStreamMessage();
streamMessage.writeString("streamMessage流消息");
streamMessage.writeLong(55);
producer.send(streamMessage);//字节消息
String s = "BytesMessage字节消息";
BytesMessage bytesMessage = session.createBytesMessage();
bytesMessage.writeBytes(s.getBytes());
producer.send(bytesMessage);//对象消息
User user = new User("cjm", "对象消息"); //User对象必须实现Serializable接口
ObjectMessage objectMessage = session.createObjectMessage();
objectMessage.setObject(user);
producer.send(objectMessage);session.commit(); //在事务性会话中,只有commit之后,消息才会真正到达目的地
producer.close();
session.close();
conn.close();
2、消息接收:通过消息监听器的方式接收消息Java代码 复制代码
public class Receiver implements MessageListener{
private boolean stop = false;public void execute() throws Exception { //连接工厂 ConnectionFactory connFactory = new ActiveMQConnectionFactory( ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616"); //连接到JMS提供者 Connection conn = connFactory.createConnection(); conn.start(); //事务性会话,自动确认消息 Session session = conn.createSession(true, Session.AUTO_ACKNOWLEDGE); //消息的来源地 Destination destination = session.createQueue("queue.hello"); //消息消费者 MessageConsumer consumer = session.createConsumer(destination); consumer.setMessageListener(this); //等待接收消息 while(!stop){ Thread.sleep(5000); } session.commit(); consumer.close(); session.close(); conn.close(); } public void onMessage(Message m) { try{ if(m instanceof TextMessage){ //接收文本消息 TextMessage message = (TextMessage)m; System.out.println(message.getText()); }else if(m instanceof MapMessage){ //接收键值对消息 MapMessage message = (MapMessage)m; System.out.println(message.getLong("age")); System.out.println(message.getDouble("sarray")); System.out.println(message.getString("username")); }else if(m instanceof StreamMessage){ //接收流消息 StreamMessage message = (StreamMessage)m; System.out.println(message.readString()); System.out.println(message.readLong()); }else if(m instanceof BytesMessage){ //接收字节消息 byte[] b = new byte[1024]; int len = -1; BytesMessage message = (BytesMessage)m; while((len=message.readBytes(b))!=-1){ System.out.println(new String(b, 0, len)); } }else if(m instanceof ObjectMessage){ //接收对象消息 ObjectMessage message = (ObjectMessage)m; User user = (User)message.getObject(); System.out.println(user.getUsername() + " _ " + user.getPassword()); }else{ System.out.println(m); } stop = true; }catch(JMSException e){ stop = true; e.printStackTrace(); } }
}
解决 1无用
悬赏问题
- ¥15 winform的chart曲线生成时有凸起
- ¥15 msix packaging tool打包问题
- ¥15 finalshell节点的搭建代码和那个端口代码教程
- ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
- ¥15 Centos / PETSc / PETGEM
- ¥15 centos7.9 IPv6端口telnet和端口监控问题
- ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
- ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
- ¥20 海浪数据 南海地区海况数据,波浪数据
- ¥20 软件测试决策法疑问求解答