消息(message)是指在应用件传递的数据。

消息队列中间件(message queue middleware MQ)是指利用高效可靠的消息传递机制进行与平台无关的数据交流。并基于数据通信来进行分布式系统的集成。也称为消息队列或者消息中间件;一般有两种传递模式:点对点(P2P)和发布/订阅(pub/sub)模式。P2P是基于队列的;PUB/SUB定义了如何向一个内容节点发布和订阅消息,这个内容节点称为主题(topic)。

消息中间件作用:

解耦、存储、扩展性、削峰、可恢复性、顺序保证、缓存、异步通信

RabbitMQ采用Erlang语言实现AMQP(advanced message queuing protocol,高级消息队列)的消息中间件。

Rabbit的具体特点:

  • 可靠性:abbitMQ使用一些机制来保证可靠性,如持久化、传输确认及发布确认等。
  • 灵活的路由
  • 扩展性
  • 高可用性
  • 多种协议
  • 多语言客户端
  • 管理界面
  • 插件机制

创建Hello:

POM.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>frabbitmq</groupId><artifactId>frabbitmq</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>4.1.0</version></dependency></dependencies></project>

生产者:

package rabbit.inaction.recv;import java.io.IOException;
import java.util.concurrent.TimeoutException;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;public class RabbitProducer {private static final String EXCHANGE_NAME = "exchange_demo";private static final String ROUTING_KEY = "routingkey_demo";private static final String QUEUE_NAME = "queue_demo";private static final String IP_ADDRESS = "192.168.17.129";private static final int PORT = 5672;public static void main(String[] args) throws IOException, TimeoutException {ConnectionFactory factory = new ConnectionFactory();factory.setHost(IP_ADDRESS);factory.setPort(PORT);factory.setUsername("root");factory.setPassword("root123");Connection connection = factory.newConnection();// 创建连接Channel channel = connection.createChannel();// 创建信道// 创建一个type = "direct",持久的、非自动删除的交换器channel.exchangeDeclare(EXCHANGE_NAME, "direct", true, false, null);// 创建一个持久化的,非排他的、非自动删除的队列channel.queueDeclare(QUEUE_NAME, true, false, false, null);// 将交换器与队列通过路由器绑定channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, ROUTING_KEY);// 发送一条持久化的消息String message = "hello rabbit";channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, MessageProperties.PERSISTENT_TEXT_PLAIN,message.getBytes("UTF-8"));channel.close();connection.close();}
}

消费者:

package rabbit.inaction.recv;import java.io.IOException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Address;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Consumer;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;public class RabbitConsumer {private static final String EXCHANGE_NAME = "exchange_demo";private static final String ROUTING_KEY = "routingkey_demo";private static final String QUEUE_NAME = "queue_demo";private static final String IP_ADDRESS = "192.168.17.129";private static final int PORT = 5672;public static void main(String[] args) {Address[] addresses = new Address[] { new Address(IP_ADDRESS, PORT) };ConnectionFactory factory = new ConnectionFactory();factory.setUsername("root");factory.setPassword("root123");// 和创建生产者有所不同try {Connection connection = factory.newConnection(addresses);// 新建连接final Channel channel = connection.createChannel();// 创建信道channel.basicQos(64);// 设置客户端最多接收未被ack的消息个数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);//           channel.close();
//          connection.close();} catch (IOException | TimeoutException e) {e.printStackTrace();}}
}

rabbit-1简介相关推荐

  1. Spring Boot 与消息 (JMS、AMQP、RabbitMQ)

    RabbitMQ教程 - 鸟哥的专栏 - CSDN博客 一.概述 大多应用中,可通过消息服务中间件来提升系统异步通信.扩展解耦能力 消息服务中两个重要概念: 消息代理(message broker)和 ...

  2. 深入解读RabbitMQ工作原理及简单使用

    深入解读RabbitMQ工作原理及简单使用 RabbitMQ系列目录 RabbitMQ在Ubuntu上的环境搭建 深入解读RabbitMQ工作原理及简单使用 Rabbit的几种工作模式介绍与实践 Ra ...

  3. Openstack各个组件的关系简介

    Openstack简介 OpenStack是一个由美国国家航空航天局(NASA)和Rackspace合作研发并发起的开源项目.其中Rackspace贡献了Swift, NASA贡献了Nova项目,这两 ...

  4. RabbitMQ 简介

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

  5. RabbitMQ简介及其安装

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

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

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

  7. 拥抱.NET Core,跨平台的轻量级RPC:Rabbit.Rpc

    不久前发布了一篇博文".NET轻量级RPC框架:Rabbit.Rpc",当初只实现了非常简单的功能,也罗列了之后的计划,经过几天的不断努力又为Rabbit.Rpc增加了一大波新特性 ...

  8. 《Python编程从入门到实践》记录之while循环简介(break、continue)

    目录 1.使用while循环让用户选择何时退出 2.使用break退出循环 3.使用continue返回循环开头 4.while循环处理列表和字典--在列表之间移动元素 5.while循环处理列表和字 ...

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

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

  10. ActiveMQ学习总结(4)——业界消息队列简介

    最近开发公司的短信平台,要用到消息队列,之前用的是亚马逊的SQS,考虑到后续业务发展,对消息推送的高并发要求,公司决定采用RabbitMQ来替换.借此机会开始熟悉各种MQ产品,下面先给大家简介下业界常 ...

最新文章

  1. IDEA 这样配置注释模板,让你高出一个逼格
  2. Redis知识点汇总
  3. 轻松易懂的缓存雪崩、穿透、击穿以及解决方案
  4. 成本直降50% | 阿里云发布云原生网关,开启下一代网关新进程
  5. FiddlerScript-常用总结
  6. 快速卷积与快速相关——MATLAB
  7. 华锋e路航x10升级工具_电芯终身质保,续航301公里的奔奔E-star代步如何?
  8. LeetCoed 5383. 给 N x 3 网格图涂色的方案数
  9. logo下方显示技术支持信息_LOGO墙形象设计的几种方案
  10. 深度学习 --- 优化入门四(Batch Normalization(批量归一化)一)
  11. i3 7100黑苹果_教你用2000多块装一台黑苹果主机 玩吃鸡剪视频毫无压力
  12. UE4+Cesium
  13. 今日头条推荐算法原理全文详解之三
  14. 5G室内覆盖面临四大挑战,如何破?
  15. 打开桌面上计算机特别慢,如何解决Win7电脑启动慢的问题?
  16. IOS 多线程之信号量
  17. 超神之路-MySQL
  18. python输出200以内素数_用python输出100-200间的素数怎么输出?
  19. (PTA)6-9 字符串压缩
  20. [文献解读#3] 一种反向生态学方法:用基因流定义微生物种群

热门文章

  1. iOS app - 跳转到应用程序下载页面
  2. 测试开发之Python核心笔记(7):输入与输出
  3. java心得hello_java学习的第一阶段总结
  4. android英语,Android 每日一句(英语)
  5. Alphabet 超越苹果成为全球市值最高公司
  6. 提升OneDrive空间
  7. YTU OJ 2914 Problem A xiaoping学构造函数
  8. unity3d新手笔记
  9. 阿里云智能总裁、达摩院院长张建锋2020云栖大会最新完整版演讲全文
  10. 来与大家分享一些我们珍藏的、有力量的语句