ActiveMQの知識

可用性のメッセージキュー

持久化事务签收zookeeper+replicated-leveldb-storeマスター・スレーブクラスタ

非同期伝送

同期送信:

  1. 明示的な同期伝送を指定します
  2. 永続メッセージを送信し、トランザクションを使用しないという前提の下で(同期送信が使用され、ブローカは、メッセージを永続されたことを示す肯定応答を返すまで、プロデューサはブロックする。ディレイ閉塞クライアントをもたらします)

非同期伝送:伝送効率を向上させますが、ブローカーのパフォーマンスの消費量が増加し、効果的にメッセージが正常に送信されていることを保証することはできません。

道http://activemq.apache.org/async-sendsを開きます

ActiveMQの非同期デフォルトを使用して送信:非永続メッセージを、トランザクション内のメッセージは非同期で送信され、永続的なメッセージ、同期伝送のために。

指定された場合useAsyncSend=true、それには、非同期的に送信されるPERSISTENT、非同期を使用して送信されるメッセージのタイプ、。ではuseAsyncSend、クライアントの場合需要容忍消息丢失的可能

右の非同期伝送方法:コールバック受け取る
正常に送信するかどうかを再度判断するために、クライアントによってレシート上を

        ActiveMQMessageProducer producer = (ActiveMQMessageProducer) session.createProducer(queue);
        producer.setDeliveryMode(DeliveryMode.PERSISTENT);
        TextMessage message = null;
        for (int i = 0; i < count; i++) {
            message = session.createTextMessage("Hello-"+i)
            message.setJMSmessageID(UUID.randomUUID().toString());
            String msgID = message.getJMSmessageID();
            producer.send(message , new AsyncCallback() {
                @Override
                public void onSuccess() {
                    System.out.println(msgID+"成功");
                }

                @Override
                public void onException(JMSException exception) {
                    System.out.println(msgID+"失败");
                    exception.printStackTrace();
                }
            });
        }
1. 同步调用
    是指从请求的发起一直到最终的处理完成期间,请求的调用方一直在同步阻塞等待调用的处理完成。

ClientCode在send发出请求后,就一直都阻塞在这里,调用Service以后,Service会调用Adapter这样一个类来进行处理,
而这个类会调用远程的一个服务等待最终调用结果的返回,是成功还是失败。
因为这个过程是阻塞等待的,所以这个过程也就是同步调用。

2.异步调用
    是指在请求发起的处理过程中,客户端的代码已经返回了,
    它可以继续进行自己的后续操作,而不需要等待调用处理完成,这就叫做异步调用。

异步调用过程,用户Clientcode在send发出请求后,调用Service以后,Service会把这个调用请求发送给消息队列,然后就立即返回了。
Clientcode收到返回以后继续向下处理,不会继续阻塞等待。
在这个过程中,客户端的调用,也就是应用程序的调用,和业务逻辑真正发送邮件的操作是不同步的。

おすすめ

転載: www.cnblogs.com/loveer/p/11408513.html