1. rabbitMQ的四種模式:可自行百度
以下是自己的理解,mq的消費模式無非是從 交換機 ,隊列 入手的。
- 生產者-消費模式: 交換機不動(默認的交換機),設置隊列(設置queue的key:qk【自定義】)
- 連接這個qk隊列上的消費者收到生產者的消息
- 發佈-訂閱模式:設置交換機(設置exchange的key),隊列不動。
- 連接這個交換機的隊列所有的消費者都收到生產者的消息
- direct模式:設置交換機,設置隊列。
- 連接這個交換機和這個隊列上的消費者收到這個消息。
- topc模式:設置交換機,設置隊列[自定義routkey的規則]。
- 根據隊列key去模糊匹配上這個 交換機的上所有的隊列key。
2.以下是使用乾貨
- 配置queue的名稱
-
import org.springframework.amqp.core.Queue; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class RabbitMQConfig { @Bean public Queue myQueue() { return new Queue(Constant.RABBITMQ_ROUT_KEY); //這個key是字符串常量 } }
-
- 生產者
-
import org.springframework.amqp.core.AmqpTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Date; /** * @author wupeng * @date 2019/6/21 13:44 * @desc MQ 生產者 */ @Component public class RabbitMQSender { @Autowired private AmqpTemplate rabbitTemplate; public void send() { String context = "hello " + new Date(); System.err.println("Sender : " + context); this.rabbitTemplate.convertAndSend(Constant.RABBITMQ_ROUT_KEY, context); } public void send(SRoomEntity sRoomEntity){ sRoomEntity = SRoomEntity.builder() .roomId("2") .useId("2") .projectId("2") .label("工程2") .originCode("hoc") .createTime(new Date()) .build(); System.err.println("Sender Object: " + sRoomEntity.toString()); this.rabbitTemplate.convertAndSend(Constant.RABBITMQ_ROUT_KEY,sRoomEntity); } }
-
- 消費者
-
import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; /** * @author wupeng * @date 2019/6/21 13:44 * @desc MQ 消費者 */ @Component @RabbitListener(queues = Constant.RABBITMQ_ROUT_KEY) public class RabbitMQReceiver { @RabbitHandler public void process(String hello) { System.err.println("Receiver : " + hello); } @RabbitHandler public void process(SRoomEntity sRoomEntity) { System.err.println("Receiver object : " + sRoomEntity.toString()); } }
以上使用一個發送字符串,一個發送對象的方法
-
-
總結:以上只是簡單的 生產-消費者模式,使用的是默認的交換機模式