消息队列

消息中间件系列教程(07) -RabbitMQ -案例代码(点对点队列模式)

孤者浪人 提交于 2019-12-10 17:16:13
引言 代码已上传至Github,有兴趣的同学可以下载看看: https://github.com/ylw-github/RabbitMQ-Demo 上一篇博客主要讲解了RabbitMQ的五种队列形式 《消息中间件系列教程(06) -RabbitMQ -五种队列形式》 ,主要讲解一下五种队列的代码实现。 主要分为: 点对点队列模式(简单) 工作队列模式(公平性) 发布订阅模式 路由模式Routing 通配符模式Topics 本文主要讲解点对点队列模式。 点对点队列模式 1.新建Maven项目RabbitMQ-Demo 2.添加Maven依赖: < dependencies > < dependency > < groupId > com.rabbitmq </ groupId > < artifactId > amqp-client </ artifactId > < version > 3.6.5 </ version > </ dependency > </ dependencies > 3.连接工具类 package com . ylw . rabbitmq ; import com . rabbitmq . client . Connection ; import com . rabbitmq . client . ConnectionFactory ; import

.NET Core简单使用RabbitMQ

谁说胖子不能爱 提交于 2019-12-10 16:59:40
RabbitMQ简介  RabbitMQ是一个开源的,基于AMQP(Advanced Message Queuing Protocol)协议的完整的可复用的企业级消息队,RabbitMQ可以实现点对点,发布订阅等消息处理模式。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持Linux,windows,macOS,FreeBSD等操作系统,同时也支持很多语言,如:Python,Java,Ruby,PHP,C#,JavaScript,Go,Elixir,Objective-C,Swift等。 RabbitMQ安装 我使用的环境是ubuntu18.04, RabbitMq需要Rrlang语言的支持,在安装RabbitMq之前需要安装Rrlang sudo apt-get install erlang-nox 更新源 sudo apt-get update 安装RabbitMq sudo apt-get install rabbitmq-server 添加users用户,密码设置为admin sudo rabbitmqctl add_user users admin 给添加的用户赋予权限 sudo rabbitmqctl set_user_tags users administrator 赋予virtual host中所有资源的配置、写

谁才是最快的消息队列:ActiveMQ, RabbitMQ, HornetQ, QPID...

橙三吉。 提交于 2019-12-10 15:52:35
Lately I performed a message queue benchmark , comparing several queuing frameworks (RabbitMQ, ActiveMQ…). Those benchmarks are part of a complete study conducted by Adina Mihailescu , and everything was presented at the April 2013 riviera.rb meet-up . You should definitely peek into Adina’s great presentation available online right here . Setup and scenarios So I wanted to benchmark brokers, using different protocols: I decided to build a little Rails application piloting a binary that was able to enqueue/dequeue items taken from a MySQL database . I considered the following scenarios:

【消息队列】ActiveMQ知识点

送分小仙女□ 提交于 2019-12-10 15:29:57
1. 什么是ActiveMQ ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位 2.消息队列应用场景 以下介绍消息队列在实际应用中常用的使用场景。 异步处理 , 应用解耦 , 流量削锋 和 消息通讯 四个场景 2.1 异步处理 场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法有两种: 1.串行方式;2.并行方式 (1)串行方式:将注册信息写入 数据库 成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户端 2)并行方式:将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信。以上三个任务完成后,返回给客户端。与串行的差别是,并行的方式可以提高处理的时间 假设三个业务节点每个使用50毫秒钟,不考虑网络等其他开销,则串行方式的时间是150毫秒,并行的时间可能是100毫秒。 因为CPU在单位时间内处理的请求数是一定的,假设CPU在1秒内吞吐量是100次。则串行方式1秒内CPU可处理的请求量是7次(1000/150)。并行方式处理的请求量是10次(1000/100) 小结:如以上案例描述,传统的方式系统的性能(并发量,吞吐量,响应时间

ZeroMQ

两盒软妹~` 提交于 2019-12-10 14:09:32
ZeroMQ 建议也了解一下原作者新重新实现的nanomsg 对比 libevent libevent 代码深度剖析 libev libuv boost-asio 1 ZeroMQ概述 ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。ZeroMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。 2 系统架构 2.1总体架构 ZeroMQ几乎所有的I/O操作都是异步的,主线程不会被阻塞。ZeroMQ会根据用户调用zmq_init函数时传入的接口参数,创建对应数量的I/O Thread。每个I/O Thread都有与之绑定的Poller,Poller采用经典的Reactor模式实现,Poller根据不同操作系统平台使用不同的网络I/O模型(select、poll、epoll、devpoll、kequeue等)。主线程与I/O线程通过Mail Box传递消息来进行通信。Server开始监听或者Client发起连接时,在主线程中创建zmq_connecter或zmq_listener,通过Mail Box发消息的形式将其绑定到I/O线程,I/O线程会把zmq_connecter或zmq_listener添加到Poller中用以侦听读

消息队列RabbitMQ入门介绍

痞子三分冷 提交于 2019-12-10 13:37:01
(一)基本概念 RabbitMQ是流行的开源消息队列系统,用erlang语言开发。我曾经对这门语言挺有兴趣,学过一段时间,后来没坚持。RabbitMQ是AMQP(高级消息队列协议)的标准实现。如果不熟悉AMQP,直接看RabbitMQ的文档会比较困难。不过它也只有几个关键概念,这里简单介绍。 RabbitMQ的结构图如下: 几个概念说明: Broker:简单来说就是消息队列服务器实体。 Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。 Queue:消息队列载体,每个消息都会被投入到一个或多个队列。 Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。 Routing Key:路由关键字,exchange根据这个关键字进行消息投递。 vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。 producer:消息生产者,就是投递消息的程序。 consumer:消息消费者,就是接受消息的程序。 channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。 消息队列的使用过程大概如下: (1)客户端连接到消息队列服务器,打开一个channel。 (2)客户端声明一个exchange,并设置相关属性。 (3)客户端声明一个queue,并设置相关属性。 (4

FreeRTOS中使用全局变量的问题

*爱你&永不变心* 提交于 2019-12-10 11:21:00
在没有操作系统的时候两个应用程序进行消息传递一般使用全局变量的方式,但是如果在使用操作系统的应用中用全局变量来传 递消息就会涉及到“资源管理”的问题。 多任务访问全局变量会带来共享资源管理问题,消息队列最终是用的全局变量!但是消息队列对这个全局变量做了保护,重点就是资源管理的保护!假如你直接使用全局变量,那么在代码中任何任务都可以随时随地的访问、修改这个全局变量! 例如: A任务正在使用全局变量S,A任务由于任务切换暂停运行切换到B任务,而B任务也要使用S,这时候B任务修改了S的值。当再次切换到A任务的时候这个变量S就变了,A任务可能就运行出错。 如果使用消息队列的话,A任务要使用队列S,先申请,申请成功以后才可以使用。B任务也要使用S的时候也要先申请,当时发现S已经被A任务使用了,所以B任务就没法使用(假设当前的队列长度为1),直到A任务使用完S并且释放掉B任务才申请使用! 操作系统中 使用 信号量、消息队列、事件标志组、任务通知。 消息队列: 全局数组 相比消息队列,主要有如下四个问题: 使用消息队列可以让 RTOS 内核有效地管理任务,而全局数组无法做到,任务的超时等机制需要用户自己实现。 使用了全局数组就要防止多任务的访问冲突,而使用消息队列则处理好了这个问题,用户无需担心。 使用消息队列可以有效地解决中断服务程序与任务之间消息传递的问题。 FIFO 机制更有利于数据的处理

spring整合RabbitMQ

▼魔方 西西 提交于 2019-12-10 07:26:18
spring整合RabbitMQ 注意一点,在发送消息的时候对template进行配置mandatory=true保证监听有效 生产端还可以配置其他属性,比如发送重试,超时时间、次数、间隔等 消费端核心配置 1.首先配置手工确认模式,用于ACK的手工处理,这样我们可以保证消息的可靠性送达,或者在消费端消费失败的时候可以做到重回队列、根据业务记录日志等处理 2.可以设置消费端的监听个数和最大个数,用于控制消费端的并发情况 @RabbitListener注解的使用 消费端监听@RabbitListener注解,这个对于在实际工作中非常的好用 @RabbitListener是一个组合注解,里面可以注解配置(@QueueBinding、@Queue、@Exchange)直接通过这个组合注解一次性搞定消费端交换机、队列、绑定、路由、并且配置监听功能等 注:由于类配置写在代码里非常不友好,所以强烈建议大家使用配置文件配置 相关代码 rabbitmq-common主要就是存放公共代码,这里只有一个实体类 Order package com.shl.rabbitmqcommon.entity; import java.io.Serializable; public class Order implements Serializable { private String id; private

springboot整合rabbitMQ

ⅰ亾dé卋堺 提交于 2019-12-10 04:15:43
项目结构 rabbitmq-common子项目 rabbitmq-common 就是一个普通的maven项目 这个项目中我就只创建了 Order这个实体类, 主要是拿这个实体类当消息传输来用的。 特别注意一点, 此类一定要实现 Serializable 这个接口,因为当我们要传输消息的时候是将对象序列化后进行传输的 、接收消息就是反序列化 package com . cpc . rabbitmqcommon . entity ; import java . io . Serializable ; /** * 这是用来做消息传递的 实体类 */ public class Order implements Serializable { private String id ; private String name ; public Order ( ) { } public Order ( String id , String name ) { super ( ) ; this . id = id ; this . name = name ; } public String getId ( ) { return id ; } public void setId ( String id ) { this . id = id ; } public String getName ( ) {

消息队列函数(msgget、msgctl、msgsnd、msgrcv)小记学习

霸气de小男生 提交于 2019-12-10 02:00:05
一、什么是消息队列 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。 Linux用宏MSGMAX和MSGMNB来限制一条消息的最大长度和一个队列的最大长度。 二、在Linux中使用消息队列 Linux提供了一系列消息队列的函数接口来让我们方便地使用它来实现进程间的通信。消息队列函数由msgget、msgctl、msgsnd、msgrcv四个函数组成。下面的表格列出了这四个函数的函数原型及其具体说明。 1. msgget函数原型 msgget(得到消息队列标识符或创建一个消息队列对象) 所需头文件 #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> 函数说明 得到消息队列标识符或创建一个消息队列对象并返回消息队列标识符 函数原型 int msgget(key_t key, int msgflg) 函数传入值 key 0(IPC_PRIVATE):会建立新的消息队列 大于0的32位整数:视参数msgflg来确定操作。通常要求此值来源于ftok返回的IPC键值 msgflg 0:取消息队列标识符