消息队列

SpringBoot整合RabbitMQ及其操作

空扰寡人 提交于 2020-01-18 01:24:39
SpringBoot 整合RabbitMQ https://blog.csdn.net/hellozpc/article/details/81436980 导入依赖 < dependency > < groupId > org . springframework . boot < / groupId > < artifactId > spring - boot - starter - amqp < / artifactId > < / dependency > 1. direct模式 直连模式,这里采用到了默认的Direct类型的Exchange,不用手动创建Exchange. 配置类 package com . hao . springbootrabbitmq . normalDirect . config ; import org . springframework . amqp . core . Queue ; import org . springframework . context . annotation . Bean ; import org . springframework . context . annotation . Configuration ; @Configuration public class NormalDirectConfig { @Bean

用消息队列实现即时通讯3

别来无恙 提交于 2020-01-18 01:12:32
消息队列(MQTT) 前面讨论过消息队列传输的具体内容,那我们该用哪种方式进行呢?通过查阅网络资料,发现有两个方式值得借鉴。 第一种方式每个帐号订阅自己的Inbox,而其他人都向这个Inbox发布信息,这种方式接收比较方便,但是发布时就比较麻烦。如群组有50人的话,一条消息就要发布50次,这和Http推拉信息有点类似。 第二种方式,也是我正在使用的方式。每个帐号只订阅自己的个人聊天信息,以及加入的群聊。主题以"/"进行分隔,个人聊天p2p/帐号,群聊group/组帐号。这种方式发送群消息时只用publish 到group/组帐号,避免太多群成员发布次数过多的问题,也是个人认为比较合理的方式。下面将简单演示一下个人聊天方式: 一旦登录成功,自己订阅p2p/自己帐号, A订阅 p2p/A B订阅 p2p/B A对B发送聊天信息: A publish "Content" 到p2p/B 由于B已订阅p2p/B,所以B将收到 “Content"信息, 同理,B回复信息,则向 p2p/A publish "Reply", A 收到:"Reply" 这样就完成简单的个人聊天,由于其他帐号没有订阅p2p/A,p2p/B所以也就无法接收到相应信息。当然,如果非要说其他帐号强制订阅p2p/A,p2p/B,不就能接收到他们私聊信息吗?是有这样的情况,但现在只能在客户端进行控制,强制不发生这种情况

SpringBoot连接多RabbitMQ源

為{幸葍}努か 提交于 2020-01-17 06:48:53
在实际开发中,很多场景需要异步处理,这时就需要用到RabbitMQ,而且随着场景的增多程序可能需要连接多个RabbitMQ。SpringBoot本身提供了默认的配置可以快速配置连接RabbitMQ,但是只能连接一个RabbitMQ,当需要连接多个RabbitMQ时,默认的配置就不太适用了,需要单独编写每个连接。 在SpringBoot框架中,我们常用的两个类一般是: RabbitTemplate :作为生产、消费消息使用; RabbitAdmin :作为申明、删除交换机和队列,绑定和解绑队列和交换机的绑定关系使用。 所以我们连接多个RabbitMQ就需要重新建立连接、重新实现这两个类。 代码如下: 配置 application.properties 配置文件需要配置两个连接: server.port=8080 # rabbitmq v2.spring.rabbitmq.host=host v2.spring.rabbitmq.port=5672 v2.spring.rabbitmq.username=username v2.spring.rabbitmq.password=password v2.spring.rabbitmq.virtual-host=virtual-host #consume 手动 ack v2.spring.rabbitmq.listener.simple

Linux进程管理: 多进程编程

六眼飞鱼酱① 提交于 2020-01-17 02:13:11
多进程编程 mind-Mapping 保存有xmind原始文件,可直接获取 无名管道PIPE 命名管道FIFO POSIX共享内存 POSIX消息队列 POSIX信号量 SYS V共享内存 SYS V消息队列 SYS V信号量 来源: CSDN 作者: Z_Stand 链接: https://blog.csdn.net/Z_Stand/article/details/104011127

rabbitmq任务书

吃可爱长大的小学妹 提交于 2020-01-17 01:32:50
消息队列任务书 消息队列是个什么东西 百度百科 这里的消息队列专门指Rabbitmq,消息队列作为一种专门的面向消息的中间件,在很多公司内都有用到,目前我们使用消息队列主要是实现以下一些功能 跨系统通信 Rabbitmq的多平台特性使其拥有良好的跨平台通信特性,我们可以使用它与在windows下运行的软件交换数据,在其他master下运行的ros节点交换数据. 与web界面交换数据 虽然官方有一个rosbridge的方案给ros与前端通信,但是这个方案耦合性太高,又没有办法实现一个界面对应多台ros master的需求.在一些项目中可以说使用rabbitmq替换掉rosbridge ps:其他的互联网公司也喜欢把消息队列用作其他方面,请看 消息队列使用的四种场景介绍 RabbitMQ的教程 官网教程 RabbitMQ基础概念详细介绍 需要完成的任务 阶段一: 自行在Ubuntu下部署rabbitmq服务器 使用官方例子中的python初体验rabbitmq中发布者、消费者、RPC客户端、PPC服务端 使用python代码实现ros topic转发器,把std_msgs::String格式的消息转发到rabbitmq中,使用另一个python节点接收这个消息,打印到屏幕上 至此,你们已经掌握了消息队列几种角色的基本使用方法,以及如何用python代码使用它们,接下来的部分,将会使用c

AspNetCore结合Redis实践消息队列,从此放心安全迭代

两盒软妹~` 提交于 2020-01-16 23:12:25
引言   熟悉 TPL Dataflow 博文的朋友可能记得这是个单体程序,使用TPL Dataflow 处理工作流任务, 在使用Docker部署的过程中, 有一个问题一直无法回避: 在单体程序部署的瞬间(服务不可用)会有少量流量无法处理;更糟糕的情况下,迭代部署的这个版本有问题,上线后无法运作, 更多的流量没有得到处理。 背负神圣使命(巨大压力)的程序猿心生一计, 为何不将单体程序改成分布式:增加服务ReceiverApp只接收数据,服务WebApp只处理数据。 知识储备 消息队列和订阅发布作为老生常谈的两个知识点被反复提及,按照JMS的规范, 官方称为点对点(point to point,message queue) 和 订阅发布(publish/subscribe,channel / topic ) 点对点   消息生产者生产消息发送到Message Queue中,然后消费者从队列中取出消息并消费。 队列会保留消息,直到他们被消费或超时; ① MQ 支持多消费者,每个消息只能被一个消费者处理 ② 消息发送者和消费者在时间上没有依赖性 ,当发送者发送消息之后, 不管消费者有没有在运行(甚至不管有没有消费者),都不会影响到消息被发送到队列 ③ 一般消费者在消费之后需要向队列应答成功 如果希望发送的消息都被处理,或只能被处理一次,你应该使用p2p模型。 发布/订阅  

RabbitMQ的交换机类型(三)

 ̄綄美尐妖づ 提交于 2020-01-16 15:47:35
RabbitMQ的交换机类型共有四种,是根据其路由过程的不同而划分成的 分别是Direct Exchange(直连交换机), Fanout Exchange(扇型交换机), Topic Exchange(主题交换机)与 Headers Exchange(头交换机) 以下是四种交换机的路由图及详解、 Direct Exchange(直连交换机):将一个名为Q的消息队列与某个名为D的直连交换机通过值为R的路由键绑定在一起,当一个Msg和路由键R发送到直连交换机D上时,直连交换机D会把Msg根据路由键R分发到Q队列。这种模式类似于一对一 Fanout Exchange(扇型交换机):当一个Msg发送到扇形交换机F上时,则扇形交换机F会将消息分别发送给所有绑定到F上的消息队列。扇形交换机将消息路由给绑定到自身的所有消息队列,也就是说路由键在扇形交换机里没有作用,故消息队列绑定扇形交换机时,路由键可为空。这个模式类似于广播。 Topic Exchange(主题交换机):主题交换机是一种发布/订阅的模式,结合了直连交换机与扇形交换机的特点,消息队列与主题交换机的绑定也是通过路由键的。当一个Msg和路由键规则发送到一个主题交换机T时,T会根据路由键规则来筛选出符合规则的绑定到自身消息队列的路由键(可能是1个,也可能是N个,也可能是0个),根据符合的路由键,将消息发送到其对应的消息队列里

RabbitMQ学习系列(四): 几种Exchange 模式

允我心安 提交于 2020-01-16 12:21:31
  上一篇,讲了RabbitMQ的具体用法,可以看看这篇文章: RabbitMQ学习系列(三): C# 如何使用 RabbitMQ 。今天说些理论的东西,Exchange 的几种模式。   AMQP协议中的核心思想就是生产者和消费者隔离,生产者从不直接将消息发送给队列。生产者通常不知道是否一个消息会被发送到队列中,只是将消息发送到一个交换机。先由Exchange来接收,然后Exchange按照特定的策略转发到Queue进行存储。同理,消费者也是如此。Exchange 就类似于一个交换机,转发各个消息分发到相应的队列中。   RabbitMQ提供了四种Exchange模式:fanout,direct,topic,header 。 header模式在实际使用中较少,本文只对前三种模式进行比较。    一. Fanout Exchange       所有发送到Fanout Exchange的消息都会被转发到与该Exchange 绑定(Binding)的所有Queue上。   Fanout Exchange 不需要处理RouteKey 。只需要简单的将队列绑定到exchange 上。这样发送到exchange的消息都会被转发到与该交换机绑定的所有队列上。类似子网广播,每台子网内的主机都获得了一份复制的消息。   所以,Fanout Exchange 转发消息是最快的。      ///

消息与消息队列

故事扮演 提交于 2020-01-16 11:53:33
消息与消息队列 About Messages and Message Queues 基于windows的应用程序是事件驱动的。它们不进行明确的函数调用(比如调用C运行库)来获得输入。取而代之的是他们等待操作系统将输入传递给他们。 操作系统传递所有的输入给各种应用程序。每个window有一个函数叫做窗口过程,只要有输入操作系统就调用他们。窗口过程处理输入后,将控制返回给操作系统。详细资料请看窗口过程。 Microsoft? Windows? XP:如果最顶层(top-level)的窗口停止响应几秒钟,系统将认为窗口被挂起。这种情况下,系统将隐藏这个窗口并用一个ghost window在相同z坐标上,相同的大小,相同的可视属性来取代他。以允许用户移动窗口,改变窗口大小,关闭窗口。然而,仅有这些行为是可操作的因为应用程序已挂起。在Debugger模式下,系统不产生ghost窗口。 This section discusses the following topics: ? Windows Messages ? Message Types ? Message Routing ? Message Handling ? Message Filtering ? Posting and Sending Messages ? Message Deadlocks ? Broadcasting

【消息队列】如何处理消息丢失的问题

丶灬走出姿态 提交于 2020-01-16 11:05:36
一、RabbitMQ 1)生产者弄丢了数据   生产者将数据发送到rabbitmq的时候,可能因为网络问题导致数据就在半路给搞丢了。 1.可以选择用rabbitmq提供的事务功能,在生产者发送数据之前开启rabbitmq事务(channel.txSelect),然后发送消息,如果消息没有成功被rabbitmq接收到,那么生产者会收到异常报错,此时就可以回滚事务(channel.txRollback),然后重试发送消息;如果收到了消息,那么可以提交事务(channel.txCommit)。但是问题是,开始rabbitmq事务机制,基本上吞吐量会下来,因为太耗性能。 2.(推荐)可以开启confirm模式,在生产者那里设置开启confirm模式之后,你每次写的消息都会分配一个唯一的id,然后如果写入了rabbitmq中,rabbitmq会给你回传一个ack消息,告诉你说这个消息ok了。如果rabbitmq没能处理这个消息,会回调你一个nack接口,告诉你这个消息接收失败,你可以重试。而且你可以结合这个机制自己在内存里维护每个消息id的状态,如果超过一定时间还没接收到这个消息的回调,那么你可以重发。      事务机制和cnofirm机制最大的不同在于,事务机制是同步的,你提交一个事务之后会阻塞在那儿,但是confirm机制是异步的,你发送个消息之后就可以发送下一个消息