嘻嘻哈哈哈0805 2015-06-15 01:26 采纳率: 0%
浏览 2569

Spring JMS接收消息的同时怎么给发送端发送回执说已经接收到消息

我想要在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();    
        }    
    }    
    

    }

    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?