TOPIC と QUEUE は 2 つの異なるメッセージ メカニズムであり、メッセージ ミドルウェアや分散システムで一般的に使用されます。
1. TOPIC
- TOPIC では、メッセージ発行者がメッセージをトピック (トピック) に送信し、トピック名を指定します。
- サブスクライバーはトピックをサブスクライブすることで、すべての受信メッセージを受信できます。
- メッセージはサブスクライバ間でブロードキャストされます。つまり、トピックをサブスクライブしているすべてのサブスクライバが同じメッセージを受信します。
2. QUEUE
- QUEUE では、メッセージ パブリッシャーがキュー (キュー) にメッセージを送信し、サブスクライバーがキューからこれらのメッセージを取得して処理します。
- キューはメッセージを FIFO (先入れ先出し) の順序で配置します。つまり、最初にキューに入ったメッセージが最初に処理され、後でキューに入ったメッセージは前のメッセージが処理されるまで待機します。処理を続行する前に。
- コンシューマがキューから受信した各メッセージは、1 つのコンシューマによってのみ処理できます。
したがって、トピックはパブリッシュ/サブスクライブ モード、つまりメッセージを複数のコンシューマに配信する必要があるモードに適しており、キューはポイントツーポイント メッセージング モード、つまりメッセージは 1 つのコンシューマによってのみ処理できるモードに適しています。
public class ActiveMQController {
@Autowired
Producer producer;
@Autowired
@Qualifier("topic")
Topic topic;
@Autowired
@Qualifier("queue")
Queue queue;
@RequestMapping("demo")
public String demo(){
return "demo";
}
@RequestMapping(value="/produce",produces = {"application/json;charset=UTF-8"})
@ResponseBody
public void produce(@ModelAttribute("mail") Mail mail) throws Exception{
producer.sendMail(queue, mail);
}
@RequestMapping(value="/topic",produces = {"application/json;charset=UTF-8"})
@ResponseBody
public void topic(@ModelAttribute("mail")Mail mail) throws Exception{
producer.sendMail(topic, mail);
}
}
@Service("producer")
public class ProducerImpl implements Producer{
@Autowired
public JmsMessagingTemplate jmsMessagingTemplate;
@Override
public void sendMail(Destination des, Mail mail) {
jmsMessagingTemplate.convertAndSend(des, mail);
}
}