一、點對點模型
當你只需要將消息發送給唯一的一個消費者時,就應該使用點對點模型,並且這是個高可靠的模型。
我們用一個貸款示例來演示這種模型
QBorrower 類將貸款申請發送給 RequestQueue 隊列,並且使用 ReplyQueue 隊列從 QLender 類中接收結果
QLender 要根據 QBorrower 提供的工資和貸款額來確定是否給予貸款,若貸款額低於200000,則最多可貸款4倍於工資的金額,若貸款額大於200000,則最多可貸款10/3 倍工資的貸款額:
MapMessage msg = (MapMessage) message;
double salary = msg.getDouble("Salary");
double loanAmt = msg.getDouble("LoanAmount");
// 決定是否接收或拒絕貸款申請
if (loanAmt < 200000) {
accepted = (salary / loanAmt) > .25;
} else {
accepted = (salary / loanAmt) > .33;
}
二、模型示例
我已經準備好了示例和編譯、運行腳本,你只需要啓動 ActiveMQ,然後依次運行 compile.bat,runQBorrower.bat 和 runQLender.bat 即可啓動後結果如下:
下面我們在 QBorrower 中輸入工資和貸款額:
看到 QLender 接受了第一次申請,拒絕了第二次申請
三、使用多個接收者實現負載均衡
即使有多個消費者在隊列中偵聽同一消息,也只有一個消費者線程會接收到消息,JMS提供者會使用負載均衡在消費者中均勻發佈消息,再運行一次
runQLender.bat 來添加一個偵聽者,可以看到 JMS提供者通過負載均衡來分發消息: