1.什么是消息中间件

消息(Message)是指在应用中传递的数据,可以是字符串或json数据

消息中间件是指利用高效可靠的消息传递机制,一般有两种传递模式:点对点模式和发布订  阅模式

点对点模式(p2p,point to point)是基于队列的,消息生产者发送消息到队列,消息消费者从队列接受消息,队列的存在使消息的异步传输成为了可能。

发布订阅模式定义了如何向一个内存节点发布订阅消息,这个内容节点称为主题(topic),主题相当于中介,消息发布者发布到一个主题,消息订阅者在一个主题订阅,发布者和订阅者不用接触便能保证消息的传递,发布和订阅在消息的一对多广播时采用。

2.消息中间件的作用

解耦:消息中间件提供了对应的api,消息生产者和消费者依赖对应的api,可以不用互相调用对方实现消息的传递

沉余(存储):处理数据的过程可能会失败,消息中间件可以把数据持久化直到他们完全被处理,保证数据的安全性

拓展性:消息中间件解耦了消息的处理过程,提高队列的入队和处理的效率时很容易的,只要增加其处理过程

削峰:在访问量剧增下,消息中间件关键组件能支撑访问压力,不会因超负荷请求而崩溃

可恢复性:一部分组件失效后,不会影响整个系统,一个处理消息的进程挂掉,加入中间件的消息仍能在系统恢复之后进行处理

顺序保证:可以保证数据顺序处理

缓冲:消息中间件通过缓冲层来帮助任务更高效率的执行,有助于优化和控制数据流经过系统的速度

异步通信:可以将不需要及时处理的消息放入消息队列,之后慢慢处理

3.消息中间件的使用

添加一个队列

生产者示例代码

public class RabbitProducer {public static final String EXCHANGE_NAME = "exchange_name";public static final String ROUTING_KEY = "toutingkey_demo";public static final String QUEUE_NAME = "queue_demo";public static final String IP_ADDRESS = "127.0.0.1";/*** rabbitmq默认端口*/public static final int PORT = 5672;public static void main(String[] args) throws Exception {ConnectionFactory factory = new ConnectionFactory();factory.setHost(IP_ADDRESS);factory.setPort(PORT);factory.setUsername("guest");factory.setPassword("guest");//创建连接Connection connection = factory.newConnection();//创建信道Channel channel = connection.createChannel();//创建一个type="direct",持久化的,非自动删除的交换器channel.exchangeDeclare(EXCHANGE_NAME, "direct", true, false, null);//创建一个持久化,非排他的,非自动删除的队列channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, ROUTING_KEY);//发送一条持久化的消息:Hello World!String message = "Hello World!";channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY,MessageProperties.PERSISTENT_TEXT_PLAIN,message.getBytes());channel.close();connection.close();}}

消费者示例代码

public class RabbitConsumer {public static final String QUEUE_NAME = "queue_demo";public static final String IP_ADDRESS = "127.0.0.1";/*** rabbitmq默认端口*/public static final int PORT = 5672;public static void main(String[] args) throws Exception {Address[] addresses = new Address[]{new Address(IP_ADDRESS, PORT)};ConnectionFactory factory = new ConnectionFactory();factory.setUsername("guest");factory.setPassword("guest");//创建连接Connection connection = factory.newConnection(addresses);//创建信道Channel channel = connection.createChannel();//设置客户端最多接受未被ack的消息的个数channel.basicQos(64);Consumer consumer = new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("recv message:" + new String(body));try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}channel.basicAck(envelope.getDeliveryTag(), false);}};channel.basicConsume(QUEUE_NAME, consumer);//等待回调行数执行完毕之后,关闭资源TimeUnit.SECONDS.sleep(5);channel.close();connection.close();}}

出自RabbitMQ实战指南

RabbitMQ简介(一)相关推荐

  1. RabbitMQ 简介以及使用场景

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:海向 cnblogs.com/haixiang/p/1019 ...

  2. RabbitMQ 简介

    为什么80%的码农都做不了架构师?>>>    RabbitMQ 简介 MQ 消息队列,上承生产者,下接消费者.从生产者侧获取消息,然后将消息转发给消费者. 由此可见,MQ必须具有两 ...

  3. RabbitMQ简介和六种工作模式详解

    一.RabbitMQ简介 是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,RabbitMQ是使用Erlang(高并发语言)语言来编写的,并且RabbitMQ是基于AMQ ...

  4. rabbitmq多个消费者_为什么要选择RabbitMQ,RabbitMQ简介,各种MQ选型对比

    MQ 是什么?队列是什么,MQ 我们可以理解为消息队列,队列我们可以理解为管道.以管道的方式做消息传递. 场景: 1.其实我们在双11的时候,当我们凌晨大量的秒杀和抢购商品,然后去结算的时候,就会发现 ...

  5. 《RabbitMQ 实战指南》第一章 RabbitMQ 简介

    <RabbitMQ 实战指南>第一章 RabbitMQ 简介 文章目录 <RabbitMQ 实战指南>第一章 RabbitMQ 简介 一.什么是消息中间件 二.消息中间件的作用 ...

  6. RabbitMQ简介及其安装

    一.简介 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件). RabbitMQ服务器是用Erlang语言编写的. 二.工作过程 发布者(Publisher ...

  7. RabbitMQ简介以及AMQP协议

    RabbitMQ能为你做些什么? 消息系统允许软件.应用相互连接和扩展.这些应用可以相互链接起来组成一个更大的应用,或者将用户设备和数据进行连接.消息系统通过将消息的发送和接收分离来实现应用程序的异步 ...

  8. rabbitmq简介及安装

    概述 RabbitMQ是对高级消息队列协议(Advanced Message Queueing Protocol, AMQP)的实现,RabbitMQ是消息传输的中间者,可以把它当做是一个消息代理,你 ...

  9. RabbitMQ简介以及应用

    一.简要介绍 开源AMQP实现,Erlang语言编写,支持多种客户端 分布式.高可用.持久化.可靠.安全 支持多种协议:AMQP.STOMP.MQTT.HTTP 适用于多系统之间的业务解耦的消息中间件 ...

  10. rabbitMq简介及docker安装

    一.JMS协议和AMQP协议 关于JMS和AMQP的区别:主要是AMQP是协议,JMS是API而RabbitMQ 基于AMQP协议,erlang语言开发,是部署最广泛的开源消息中间件,是最受欢迎的开源 ...

最新文章

  1. 纪念逝去的头发--一次debug经历
  2. Spring之作用域
  3. 小站教育携手神策数据,数据赋能留学语言培训教育的智能化探索
  4. hash table(用乘法散列法实现)
  5. BoW(词袋Bag of words)
  6. 给IT新人的15个建议:程序员的辛酸反省与总结!
  7. html5+shim脚本,HTML5探秘:用requestAnimationFrame优化Web动画
  8. JasperReport报表设计总结
  9. jmeter测试接口--form表单提交请求(解决请求传参为空的问题)
  10. 修改 timezone
  11. android nef转jpg格式文件,nef格式转换成jpg
  12. ​专科生学习云计算就业前景如何?
  13. 01_01_三步开启C语言编程_小白篇
  14. 京东无法登录显示服务器异常,京东账号异常怎么解决?方法介绍
  15. 小学六年级下册计算机计划,小学信息技术六年级下册教学计划
  16. java 给图片添加水印文字
  17. 南京建邺、秦淮等7个区公布校外培训机构白名单
  18. 听计算机课验课题评语,听课记录评语及建议
  19. Facebook聊单,SaleSmartly有妙招!
  20. 2020年汽车芯片行业深度报告-1

热门文章

  1. Azure DevOps Server 2022新功能:禁止用户管理自己创建的分支(mange-permission)
  2. 奶粉php和opo区别,什么是奶粉中的“二代OPO”,你知道这3个优点吗?
  3. 工厂人员定位系统:精准获取员工位置和轨迹,智能打卡签到
  4. java中page的对象,page对象
  5. Python的treelib构建多叉树——函数介绍
  6. [创业-20]:财务报表 - 所有者权益之资本公积
  7. BIM族库下载——3D乔木植物族库
  8. 前端基础知识和一些面试题
  9. 高等工程数学 —— 第二章 (1) Smith标准型与Jordan标准型
  10. 文件服务器 选型,普通文件存储服务器选型原则