为什么要使用MQ消息中间件?它解决了什么问题?关于为什么要使用消息中间件?消息中间件是如何做到同步变异步、流量削锋、应用解耦的?网上已经有很多说明,我这里就不再说明。我在接下来的RabbitMq系列博客里会将官方的讲解翻译过来,同时加以自己的理解整理成博客,希望能和大家共同交流,一起进步。

RabbitMq原理图

1、RabbitMq简介

RabbitMq是一个消息中间件:它接收消息、转发消息。你可以把它理解为一个邮局:当你向邮箱里寄出一封信后,邮递员们就能最终将信送到收信人手中。类似的,RabbitMq就好比是一个邮箱、邮局和邮递员。RabbitMq和邮局最大的区别是:RabbitMq接收、转发的都是二进制数据块--消息,而不是纸质的数据文件。

RabbitMq、消息相关术语如下:

生产者:生产者只发送消息,发送消息的程序即为生产者:

消息队列:消息队列就相当于RabbitMq中的邮箱名称。尽管消息在你的程序和RabbitMq中流动,但它只能存储在消息队列中。队列本质上是一个大的消息缓存,它能存多少消息,取决于主机的内存和磁盘限制。多个生产者可以往同一个消息队列中发送消息;多个消费者可以从同一个队列中获取数据。我们以下列图形来表示一个消息队列:

消费者:消费者是一个等待接收消息的程序:

注意:生产者、消费者和RabbitMq可以在不同的机器上;在很多的应用中,一个生产者同时也可能是消费者。

2、“Hello World!”

在这小节里,我们将写一个消息生产者用来发送消息、一个消息消费者来消费消息(接收消息并打印出来)。

在下面图形中,“P”是我们的生产者,“C”是我们的消费者,中间的红框是我们的消息队列,保存了从生产者那里接收到的准备转发到消费方的消息。

Java客户端类库说明:

RabbitMq使用多种协议,本指南使用AMQP 0-9-1协议,该协议是一个开源的、通用的消息协议。RabbitMq有多种语言的客户端,这里我们使用JAVA语言的客户端做实验。通过以下地址下载RabbitMq客户端jar包和依赖包:

amqp-client-5.5.1.jar

slf4j-api-1.7.25.jar

slf4j-simple-1.7.25.jar

把这三个jar包拷贝到你的工作目录,包括后面教程要新建的java文件。

2.1 发送消息

生产者连接RabbitMq,发送一条简单的消息”Hello World!“后就退出。

在Send.java类中,需要引入以下依赖包:

1 import com.rabbitmq.client.ConnectionFactory;2 import com.rabbitmq.client.Connection;3 import com.rabbitmq.client.Channel;复制代码

给队列起个名字:

1 public class Send {2 private final static String QUEUE_NAME = "hello";3 public static void main(String[] argv) throws Exception {4 ...5 }6 }复制代码

创建连接到服务器的连接Collection:

1 onnectionFactory factory = new ConnectionFactory();2 factory.setHost("localhost");3 try (Connection connection = factory.newConnection();4 Channel channel = connection.createChannel()) {5 6 }复制代码

这个连接即套接字连接,为我们处理协议版本协商和身份验证等。这里我们连接一个本地的RabbitMq:因此是localhost,如果你想要连接一个远程机器上的RabbitMq,只需要把localhst改成那台机器的计算机名或是IP地址。

创建完连接之后,我们继续创建一个信道:Channel。我们需要使用try-with-resource表达式,因为Connection和Channel都实现了JAVA接口Closeable,属于资源,需要关闭,这样我们就不需要显示地在我们的代码中进行关闭了。(关于信道,请参考文章最顶部的RabbitMq原理图,是TCP里面的虚拟链接,例如:电缆相当于一个TCP,信道就是里面的一个独立光纤,一条TCP上面创建多条信道是没有问题的;TCP一旦打开就分创建AMQP信道;无论是发布消息、接收消息、订阅队列,这些动作都是通过信道完成的)。

为了发送消息,我们还必须要定义一个需要发送到的消息队列,这些都要使用try-with-resource表达式:

1 channel.queueDeclare(QUEUE_NAME, false, false, false, null);2 String message = "Hello World!";3 channel.basicPublish(

vs如何实现tcp连续发送多条消息_消息队列之 RabbitMQ相关推荐

  1. 计算发送延时与传播延迟_消息队列——延时消息应用解析及实践

    简介:在大部分场景下业务系统如果只需要实现异步解耦.削峰填谷等能力,常规的普通消息就可以满足此类需求.除此之外,在某些特殊的业务场景中,普通消息类型存在无法满足需求的情况.这就需要消息队列服务本身支持 ...

  2. 主机甲和主机乙之间已建立一个TCP连接,TCP最大段长为1000B。若主机甲的当前拥塞窗口为4000B,在主机甲向主机乙连续发送两个最大段后,成功收到主机乙发送的第一个段的确认段,确认段中通告的接收窗

    主机甲和主机乙之间已建立一个TCP连接,TCP最大段长为1000B.若主机甲的当前拥塞窗口为4000B,在主机甲向主机乙连续发送两个最大段后,成功收到主机乙发送的第一个段的确认段,确认段中通告的接收窗 ...

  3. stm32 udp连续发送大量数据_TCP和UDP详解

    本篇文章主要是从运输层协议概述.UDP.TCP.可靠传输的工作原理.TCP首部格式.TCP可靠传输的实现.TCP流量控制.TCP的拥塞控制.TCP的连接管理这几个方面进行解析. 一.运输层协议概述 1 ...

  4. 控制发送的请求条数_一个 HTTP 请求的曲折经历

    关注"逆锋起笔"领取视频教程☞ 程序员进阶必备资源免费送「各种技术!」 ☜ 来源:www.neroht.com/article-detail/18从一个经典的面试题说起,输入URL ...

  5. TCP连续ARQ协议和滑动窗口协议

    TCP协议通过使用连续ARQ协议和滑动窗口协议,来保证数据传输的正确性,从而提供可靠的传输. 一.ARQ协议 ARQ协议,即自动重传请求(Automatic Repeat-reQuest),是OSI模 ...

  6. 【嵌入式12】DMA通信原理及编程实验,DMA方式向上位机连续发送数据

    本文介绍DMS通信原理,STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据. 一.DMA介绍 什么是DMA? DMA介绍 DMA传输方式 DMA传输参数 DMA数据传输的 ...

  7. STM32F103C8T6核心开发板下,采用串口DMA方式向上位机连续发送数据的实例详解

    STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据 文章目录 STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据 前言 一.DMA应用初步 ...

  8. Qt之QProcess 连续执行多条指令并获取指令返回内容

    简述 system可以连续执行多条指令,只需要使用分号":"分开指令就行,但是system只能返回int类型结果,得不到想要的指令返回内容,且还会阻塞主线程(除非在命令后面加上 & ...

  9. linux 内核 发送数据,linux 内核tcp数据发送的实现

    在分析之前先来看下SO_RCVTIMEO和SO_SNDTIMEO套接口吧,前面分析代码时没太注意这两个.这里算是个补充. SO_RCVTIMEO和SO_SNDTIMEO套接口选项可以给套接口的读和写, ...

最新文章

  1. Jackson注解学习参考
  2. 细讲 | Attention Is All You Need
  3. jquery PHP 中文乱码,PHP输出中文乱码怎么解决?
  4. 全球与中国青霉素类药品市场竞争现状及发展前景预测报告2022-2028年
  5. java web应用开发_Java Web应用开发基础
  6. Delphi编程修改ProgressBar的颜色
  7. dos命令安装windows服务
  8. (3)vue.js安装
  9. 在资源管理器中增加二级菜单
  10. ActiveMQ RabbitMQ RokcetMQ Kafka实战 消息队列中间件视频教程
  11. Duplicate Manager Pro for Mac(重复文件查找工具)破解版安装
  12. sqlserver Split 开放写法有兴趣的学习一下
  13. java高级工程师 考试_JAVA高级工程师笔试题及答案
  14. dubbo面试题-dubbo源码解析
  15. 漂亮的消息通知html邮件模板,好看的邮件模板?
  16. 找到某个关键字 同义词词林 python_python基础——标识符
  17. Altium designer常用设置【转】
  18. 半色调技术简介(一)
  19. moviepy第2天|对视频添加圆圈渐变大小的结尾及文字
  20. 硬件建设为学校发展服务器,《学校机房建设工程设计-建议方案》.docx

热门文章

  1. Nginx通过域名配置虚拟机
  2. JSP页面的执行过程
  3. reactor线程模型_从TCP服务器到I/O模型,带你学习Netty
  4. 催收系统服务器,催收系统安装文档/ 环境搭建 /测试服务器 java工程启动文档
  5. 怎样查看电脑系统版本_微信7.0.0自动更新后怎样去还原以前的旧版本?
  6. 【计算机网络(微课版)】第2章 物理层 课后习题及答案
  7. 手把手 docker 从零搭建 jenkins 服务器
  8. 为什么魂斗罗只有 128 KB却可以实现那么长的剧情?
  9. 玩转springboot:自定义异常处理和深入异常处理原理
  10. Java基础提升篇:equals()与hashCode()方法详解