`

【转】DeliveryMode例子

    博客分类:
  • JMS
 
阅读更多

在下面的例子中,分别发送一个Persistent和nonpersistent的消息,然后关闭退出JMS。

            import javax.jms.Connection;
            import javax.jms.DeliveryMode;
            import javax.jms.MessageProducer;
            import javax.jms.Queue;
            import javax.jms.Session;
            import org.apache.activemq.ActiveMQConnectionFactory;
            import org.apache.activemq.command.ActiveMQQueue;

            public class DeliveryModeSendTest {

                public static void main(String[] args) throws Exception {
                    ActiveMQConnectionFactory factory = new
            ActiveMQConnectionFactory("vm://localhost");
                    Connection connection = factory.createConnection();
                    connection.start();
                    Queue queue = new ActiveMQQueue("testQueue");
                    Session session = connection.createSession(false,
            Session.AUTO_ACKNOWLEDGE);
                    MessageProducer producer = session.createProducer(queue);
                    producer.setDeliveryMode(DeliveryMode.PERSISTENT);
                    producer.send(session.createTextMessage("A persistent
            Message"));
                    producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
                    producer.send(session.createTextMessage("A non persistent
            Message"));
                    System.out.println("Send messages sucessfully!");
                }
            }

                运行上面的程序,当输出“Send messages
            sucessfully!”时,说明两个消息都已经发送成功,然后我们结束它,来停止JMS Provider。

                接下来我们重新启动JMS Provicer,然后添加一个消费者:

            import javax.jms.Connection;
            import javax.jms.JMSException;
            import javax.jms.Message;
            import javax.jms.MessageConsumer;
            import javax.jms.MessageListener;
            import javax.jms.Queue;
            import javax.jms.Session;
            import javax.jms.TextMessage;
            import org.apache.activemq.ActiveMQConnectionFactory;
            import org.apache.activemq.command.ActiveMQQueue;

            public class DeliveryModeReceiveTest {

                public static void main(String[] args) throws Exception {
                    ActiveMQConnectionFactory factory = new
            ActiveMQConnectionFactory("vm://localhost");
                    Connection connection = factory.createConnection();
                    connection.start();
                    Queue queue = new ActiveMQQueue("testQueue");
                    Session session = connection.createSession(false,
            Session.AUTO_ACKNOWLEDGE);
                    MessageConsumer comsumer = session.createConsumer(queue);
                    comsumer.setMessageListener(new MessageListener(){
                        public void onMessage(Message m) {
                            try {
                                System.out.println("Consumer get " +
            ((TextMessage)m).getText());
                            } catch (JMSException e) {
                                e.printStackTrace();
                            }
                        }
                    });
                }
            }

            运行上面的程序,可以得到下面的输出结果:

            Consumer get A persistent Message

            可以看出消息消费者只接收到一个消息,它是一个Persistent的消息。而刚才发送的non persistent消息已经丢失了。

            另外, 如果发送一个non persistent消息, 而刚好这个时候没有消费者在监听, 这个消息也会丢失.

分享到:
评论

相关推荐

    ActiveMQ代码示例

    以下是一个简单的例子: ```java Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Queue queue = session.createQueue("myQueue"); MessageProducer producer = session....

    【ASP.NET编程知识】c# rabbitmq 简单收发消息的示例代码.docx

    在这个例子中,我们展示了两种消费消息的方式。第一种是旧版方法,通过调用BasicConsume并提供回调函数来处理接收到的消息。另一种方式是使用BasicGet,但这种方式通常不推荐,因为它不支持批量获取和确认机制。 ...

    javax.jms.jar下载

    javax.jms.DeliveryMode.class javax.jms.Destination.class javax.jms.ExceptionListener.class javax.jms.IllegalStateException.class javax.jms.InvalidClientIDException.class javax.jms....

    java使用rabbitMq服务

    - **属性**:如`deliveryMode`用于设置消息持久化,`expiration`设置消息过期时间,`MessageId`作为消息唯一标识。 - **类和注解**:`connectionFactory`用于建立连接,`AmqpAdmin`管理Exchange、Queue和Binding,`...

    RabbitMQ入门代码

    在发送消息时,我们需要设置`DeliveryMode`为2,这表示消息应被持久化: ```java Properties props = new BasicProperties.Builder() .deliveryMode(2) // 持久化 .build(); channel.basicPublish("", queueName,...

    javax.jms.jar

    javax.jms.DeliveryMode.class javax.jms.Connection.class javax.jms.Session.class javax.jms.ConnectionMetaData.class javax.jms.ExceptionListener.class javax.jms.ServerSessionPool.class javax.jms....

    activemq优化方案

    消息的持久性是通过 `DeliveryMode` 属性来控制的,包括 `PERSISTENT` 和 `NON_PERSISTENT` 两种模式。对于不需要极高可靠性的场景,推荐使用 `NON_PERSISTENT` 模式,以换取更快的入队速度。这种方式牺牲了一定程度...

    监控错误日志并通过rabbitMq发送钉钉通知.docx

    <deliveryMode>NON_PERSISTENT</deliveryMode> <autoDelete>false <queueSize>1024 <discardingThreshold>80 <maxFlushTime>2000 <neverBlock>true ``` 这段配置会将`com.basis`包下所有级别的错误...

    基于Java通讯开发jms源代码 (jms通讯开发源码)

    setJMSDeliveryMode(int deliveryMode) throws JMSException; boolean getJMSRedelivered() throws JMSException; void setJMSRedelivered(boolean redelivered) throws JMSException; String ...

    rabbitmq-javadoc

    4. **枚举和异常**:RabbitMQ Java 客户端中可能包含一些枚举类型,如 `DeliveryMode`,表示消息的持久化级别,以及自定义的异常类,如 `IOException` 的子类,用于处理与网络或数据传输相关的错误。 5. **示例代码...

    ios-YSHYAssetsPickerDemo.zip

    我们可以通过设置请求选项来控制图像的质量和大小,例如使用`PHImageRequestOptions`的`deliveryMode`和`resizeMode`属性。当图片加载完成后,可以将其显示在一个自定义的视图控制器中,提供缩放和平移等交互功能,...

    消息中间件面试专题及答案

    发送消息时,使用持久化模式(`DeliveryMode.PERSISTENT`)。 - 在点对点模式中,消息默认会存储直到被消费者消费,所以消息丢失不是问题。 3. **解决消息重复问题** - 防止消息重复执行的关键是记录消息的处理...

    rabbitmq笔记及面试要点

    2) 发布消息时的deliveryMode设置为2,表示持久化;3) 消息已到达持久化交换器和队列。RabbitMQ通过将持久化消息写入磁盘日志,保证了即使在服务器重启后也能恢复消息。 面试中,RabbitMQ的相关知识点可能包括但不...

    iOS 实现一个自定义相册图片选择组件,开发语言object-C

    同时,利用`PHImageRequestOptions`的`deliveryMode`设置为`PHImageRequestOptionsDeliveryModeHighQualityFormat`,在不牺牲画质的情况下降低内存消耗。 6. **预览与选择**: 当用户点击某张图片进入预览模式,...

    ios应用源码之相册拾取器 2018128

    requestOptions.deliveryMode = .highQualityFormat requestOptions.isNetworkAccessAllowed = true imageManager.requestImageData(for: asset, options: requestOptions) { (data, _, _, _) in // 处理图片数据,...

    ActiveMQ持久化机制代码实例

    在提供的Java代码中,如果将`DeliveryMode.PERSISTENT`设置为非持久化(默认值),则消息将不会被持久化保存。 2. **持久化**:相反,如果使用持久化模式,即使服务器关闭,未消费的消息也会被存储在ActiveMQ的数据...

    ios-PhotoKit 仿微信相册图片选择.zip

    9. **性能优化**:在加载大量图片时,使用`PHImageRequestOptions`的`networkAccessAllowed`和`deliveryMode`属性可以优化加载策略,例如后台加载或低质量预览。 10. **用户界面设计**:模仿微信的界面设计,应考虑...

    iOS实现自定义相册多选demo

    options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat; [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:CGSizeMake(100, 100) contentMode:...

Global site tag (gtag.js) - Google Analytics