当前位置:   article > 正文

RabbitMQ的五种常用消息模型_rabbitmq五种消息模型

rabbitmq五种消息模型

目录

五种消息模型

直连模型

work模型

订阅模型-Fanout(广播)

订阅模型-Direct(路由)

订阅模型-Topic(通配符)

持久化

消息确认机制(ACK)


 

五种消息模型

 

RabbitMQ提供了7种消息模型。其中3、4、5这三种都属于订阅模型,只不过进行路由的方式不同。67这里暂时不表。

总结:直连模式1v1,work模式抢红包,广播模式公众号,路由模式小团体,Topic模式土豪版小团体

 

 

直连模型

 

原理

P(producer/ publisher):生产者,发送消息到消息队列

C(consumer):消费者从消息队列中取出消息进行消费

Queue:消息队列,图中红色部分。类似一个邮箱,可以缓存消息;生产者向其中投递消息,消费者从其中取出消息。

总之:生产者将消息发送到队列,消费者从队列中获取消息,队列是存储消息的缓冲区注意,当消费者从队列中消费消息后,这条消息是否还存在队列中,以及这个队列是否存在,都需要你自定义进行设置,在“持久化”这一节里面有讲。

 

举例

producer

新建一个ems用户,新建一个/ems虚拟主机,让ems用户与ems虚拟主机进行绑定

新建一个maven父子项目,父项目空即可,子项目中导入rabbitmq和junit依赖

  1. <dependency>
  2. <groupId>com.rabbitmq</groupId>
  3. <artifactId>amqp-client</artifactId>
  4. <version>5.7.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>junit</groupId>
  8. <artifactId>junit</artifactId>
  9. <version>4.11</version>
  10. </dependency>

我们先新建一个工具类,用来创建连接对象,这里用到了单例模式!

  1. public class RabbitMQUtils {
  2. private static ConnectionFactory connectionFactory;
  3. static {
  4. connectionFactory = new ConnectionFactory();
  5. //我们把重量级资源通过单例模式加载
  6. connectionFactory.setHost("192.168.62.130");
  7. connectionFactory.setPort(5672);
  8. connectionFactory.setUsername("ems");
  9. connectionFactory.setPassword("ems");
  10. connectionFactory.setVirtualHost("/ems");
  11. }
  12. //定义提供连接对象的方法
  13. public static Connection getConnection(){
  14. try{
  15. return connectionFactory.newConnection();
  16. }catch (Exception e){
  17. e.printStackTrace();
  18. }
  19. return null;
  20. }
  21. //定义关闭通道和关闭连接工具方法
  22. public static void closeConnectionAndChanel(Channel channel, Connection conn){
  23. try {
  24. if(channel!=null) {
  25. channel.close();
  26. }
  27. if(conn!=null) {
  28. conn.close();
  29. }
  30. }catch (Exception e){
  31. e.printStackTrace();
  32. }
  33. }
  34. }

在HelloWorld(模式一官方命名就叫helloworld)包下新建Producer.java

  1. public class Provider {
  2. //生产消息
  3. @Test
  4. public void testSendMessage() throws IOException, TimeoutException{
  5. //通过工具类获取连接
  6. Connection connection = RabbitMQUtils.getConnection();
  7. //创建通道
  8. Channel channel = connection.createChannel();
  9. //参数1:是否持久化,参数2:是否独占队列 参数3:是否自动删除 参数4:其他属性
  10. channel.queueDeclar
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/871524
推荐阅读
相关标签
  

闽ICP备14008679号