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. 操作系统(十)进程通信
  2. react循环setstate_[React] 8 - React 自身或工程性能优化点?
  3. NLPPython笔记——WordNet
  4. 有没有人告诉你联合贷款的这些细则
  5. 计算机安全的重要性 小论文,网络安全的重要性初中议论文
  6. python 中排序
  7. 国内流行的两大开源.net微信公众平台SDK对比分析
  8. pandas筛选某个列值是否位于某个列表内
  9. java 算法 pdf_Java 常用算法手册 PDF扫描版[39MB]
  10. CSS命名规范(规则)常用的CSS命名规则
  11. springboot在线外卖点餐系统毕业设计毕设作品开题报告开题答辩PPT
  12. 道哥亲笔:谈谈为什么要做弹性安全网络
  13. clean code 读书笔记
  14. WebRoot和Web-Info区别
  15. 绕流运动与附面层基本概念
  16. WORKNC基础到进阶视频教程
  17. autojs自定义Switch
  18. R语言survival包clogit函数构建条件logistic回归模型、summary函数查看模型汇总统计信息、通过似然比检验分析结果判断模型有无统计学意义
  19. 百济神州宣布在上交所科创板IPO定价每股192.6元;云顶新耀提出奥密克戎疫苗开发战略 | 医药健闻...
  20. 【数据安全案例】北京购车摇号查询系统出现信息泄露漏洞

热门文章

  1. 判断是否为iphoneX系列手机(移动端系列)
  2. 解密趣头条快跑上市的背后“推手”
  3. CodeForces 436C (Dungeons and Candies)
  4. 在云服务器上部署项目(上)
  5. 数据系统架构-7.数据智能
  6. AI化学 | 论文代码整理
  7. 五轴数控加工的操作和编程技能密切相关
  8. 基于bim技术的应用软件有哪些?哪些应用软件?
  9. 非易失性数据库系统存储与恢复方法
  10. Charset编码问题导致的中文乱码