RabbitMQ小记(四)】的更多相关文章

RabbitMQ(四) -- Routing `rabbitmq`可以通过路由选择订阅者来发布消息. Bindings 通过下面的函数绑定Exchange与消息队列: channel.queue_bind(exchange=exchange_name, queue=queue_name) 可以通过添加`routing_key`来做路由选择,如下: channel.queue_bind(exchange=exchange_name, queue=queue_name, routing_key='b…
在上一篇的最后,编写了一个C#驱动RabbitMQ的简单栗子,了解了C#驱动RabbitMQ的基本用法.本章介绍RabbitMQ的四种Exchange及各种Exchange的使用场景. 1 direct类型 1 direct路由规则   上一篇最后一个栗子使用的Exchange就是direct类型的,direct类型的exchange路由规则很简单: exchange在和queue进行binding时会设置routingkey(为了避免和下边的routingKey混淆,很多时候把这里的routi…
1.RabbitMQ管理 (1)权限管理 物理服务器和虚拟主机都各自有独立的权限管理,用户访问需要设置权限. 授权命令:rabbitmqctl set permissions [-p vhost] {user) {conf) {write) { read) vhost:授予用户可以访问的vohost名称. user:访问指定vohost的用户名称.    conf:用户在那些资源有配置权限的正则表达式 write:用户在哪些资源上有写权限的正则表达式 read:用户在那些资源上有读权限的正则表达…
前面几篇讲解了如何使用rabbitMq,这一篇主要讲解spring集成rabbitmq. 首先引入配置文件org.springframework.amqp,如下 <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>1.6.0.RELEASE</version> <…
在message到达Exchange后,Exchange会根据route规则进入对应的Queue中,message可能进入一个Queue也可能进入对应多个Queue,至于进入哪个Queue或者是说哪个Queue都不进入,这要依据ExChange的ExchangeType和Exchange所绑定的路由规则,实现AMQP0.9.1协议的RabbitMQ Broker提供了四种ExChangeType. 这四种ExchangeType分别是Direct exchange,Fanout exchange…
1.RabbitMQ相关介绍 (1)RabbitMQ整体上是一个生产者和消费者模型,主要负责接收.存储.转发消息.RabbitMQ整体结构图如下: (2)生产者:发送消息的一方,生产者创建一条消息,发布到RabbitMQ上,消息一般分为两部分:消息体和标签,消息体是带有业务逻辑结构的数据,也可以进一步对消息体进行序列化,标签用来描述这条消息.    消费者:接收消息的一方,消费者创建一条连接,接到RabbitMQ服务器上的队列上,当消费者消费一条队列上的消息时,只是消费消息体,标签自动丢弃,所以…
RabbitMQ 配置 一.RabbitMQ 配置修改方式 1.修改环境变量 2.修改配置文件(只介绍这个) 3.修改运行时参数和政策 locate rabbitmq vi /var/log/rabbitmq/rabbit@10-10-43-207.log-20160918 说明我尚未添加配置文件,采用的默认配置启动的 RabbitMQ 还有一个地方可以看到有无添加配置文件(rabbitmq_management,见下图) 二.配置项 Key Documentation tcp_listener…
前言:前面我们讲解的都是本地服务器,现在如果需要远程计算机上运行一个函数,等待结果.这就是一个不同的故事了,这种模式通常被称为远程过程调用或者RPC. 本章教程我们使用RabbitMQ搭建一个RPC系统,一个客户端和一个可扩展的RPC服务器,现在我们开始吧. Callback queue 一般做rpc在RabbitMQ是比较容易的,一个客户端发送一个请求信息和一个响应信息的服务器回复,为了得到一个响应,我们需要发送一个回调队列地址请求.如下 Message属性: AMQP协议一共预定义了14个属…
本篇博客我们准备给日志系统添加新的特性,让日志接收者能够订阅部分消息.例如,我们可以仅仅将致命的错误写入日志文件,然而仍然在控制面板上打印出所有的其他类型的日志消息. 1.绑定(Bindings) 在上一篇博客中我们已经使用过绑定.类似下面的代码: channel.queueBind(queueName, EXCHANGE_NAME, ""); 绑定表示转发器与队列之间的关系.我们也可以简单的认为:队列对该转发器上的消息感兴趣. 绑定可以附带一个额外的参数routingKey.为了与避…
上一篇博客我们建立了一个简单的日志系统,我们能够广播日志消息给所有你的接收者,如果你不了解,请查看:RabbitMQ (三) 发布/订阅.本篇博客我们准备给日志系统添加新的特性,让日志接收者能够订阅部分消息.例如,我们可以仅仅将致命的错误写入日志文件,然而仍然在控制面板上打印出所有的其他类型的日志消息. 1.绑定(Bindings) 在上一篇博客中我们已经使用过绑定.类似下面的代码: channel.queueBind(queueName, EXCHANGE_NAME, ""); 绑定…
Binding详解   黄线部分就是binding Exchange与Exchange,Queue之间的虚拟连接,Binding中可以包含Routing key或者参数   创建binding 注意: default Exchange不能进行Binding,也不需要进行绑定. 除default Exchange之外,其他任何Exchange都需要和Queue进行Binding,否则无法进行消息路由(转发) Binding的时候,可以设置一个或多个参数,其中参数要特别注意参数类型,如果Routin…
1.路由 在上一个的教程中,我们构建了一个简单的日志记录系统.我们能够向许多接收者广播日志消息. 在本次教程中,我们向该系统添加一些特性,比如,我只需要严重错误(erroe级别)的部分日志打印到磁盘文件中,但是同时仍然把所有的日志打印到控制台. 2.绑定 在前面的例子中.我们已经用以下的代码创建了绑定. channel.queueBind(queueName, EXCHANGE_NAME, ""); 绑定是指交换机(exchange)与队列(queue)之间的联系,也可以理解为,当某个…
EF基础知识小记三(设计器=>数据库)介绍了如何创建一个空设计器模型,并如何将模型同步到数据库的表中,本文则主要介绍如何将一个存在的数据库同步到模型设计器中.为了能快速的模拟这个过程,给出一下建表语句,代码如下: --建表脚本 create table Student ( Id int not null, Name ) not null, Age int not null ) create table Teacher ( Id int not null, Name ) not null, Age…
1.EF简介 EF之于Linq,EF是一种包含Linq功能对象关系映射技术.EF对数据库架构和我们查询的类型进行更好的解耦,使用EF,我们查询的对象不再是C#类,而是更高层的抽象:Entity Data Model,这提供了额外的灵活性,但在性能和简单性上面也会有所损失. EF的优点:在数据库架构和实体类之间的映射提供了更好的灵活性,还通过程序支持除了SqlServer之外的数据库. Linq To Sql之于EF Linq To Sql和EF师出同门,EF支持LINQ to SQL几乎同样的查…
RabbitMQ_Routing 本节内容我们将对发布订阅增加一个特性:订阅子集.比如我们将一些危险的错误消息保存进硬盘中,同时在控制台仍然能够读取所有的消息 Bingings 上一节内容我们将队列跟交换器进行binging: err = ch.QueueBind( q.Name, // queue name "", // routing key "logs", // exchange false, nil) 一个binging是将交换器跟队列进行关联,可以简单理解…
上篇文章把单机集群搭建好了,可以开始验证普通集群的相关功能了. 我们首先在管理后台(15672,15673 都可以)添加一个用户,并用新用户登录,添加一个虚拟主机 由于是在一台机器上模拟集群,所以我们把创建连接的工具类小改一下,将端口号作为入参. public static class ConnectionHelper { public static IConnection GetConnection(int port) { //定义一个连接工厂 ConnectionFactory factor…
转自 http://blog.csdn.net/xiaoxian8023/article/details/48729479 翻译地址:http://www.rabbitmq.com/tutorials/tutorial-three-java.html 在前面的教程中,我们创建了一个工作队列,都是假设一个任务只交给一个消费者.这次我们做一些完全不同的事儿——将消息发送给多个消费者.这种模式叫做“发布/订阅”. 为了说明这个模式,我们将构建一个简单日志系统.它包含2段程序:第一个将发出日志消息,第二…
一.消息如何保证可靠性传输 1.1.可能出现消息丢失的情况 1.Producer在把Message发送Broker的过程中,因为网络问题等发生丢失,或者Message到了Broker,但是出了问题,没有保存下来 针对这个问题,Producer可以开启MQ的事务,如果这个过程出现异常,进行回滚,但是有个很大的问题,你提交一个事务就会阻塞在那, 非常影响性能,生产环境肯定不会开启事务,一般都是使用confirm机制 2.Broker接收到Message暂存到内存,Consumer还没来得及消费,Br…
本文使用Docker搭建RabbitMQ集群,然后使用HAProxy做负载均衡,最后使用KeepAlived实现集群高可用,从而搭建起来一个完成了RabbitMQ高可用负载均衡集群.受限于自身条件,本文使用VMware虚拟机的克隆功能克隆了两台服务器进行操作,仅作为一个demo,开发中可根据实际情况进行调整. 首先看下RabbitMQ高可用负载均衡集群长什么样子: 使用Docker构建RabbitMQ高可用负载均衡集群大概分为三个步骤: 启动多个(3个为例)RabbitMQ,构建RabbitMQ…
前言 在前面的文章中我们介绍过RabbitMQ的搭建:RabbitMQ的安装过以及各大主流消息中间件的对比:,本章就主要来介绍下我们之前安装的管控台是如何使用以及如何通过命令行进行操作. 1. 命令行操作 1.1 基础服务的命令操作 rabbitmqctl stop_app:关闭应用 rabbitmqctl start_app:启动应用 rabbtmqctl status:节点状态 rabbitmqctl add_user username password:添加用户 rabbitmqctl l…
跨越集群主要两种插件:Federation和Shovel. 原来的rabbitmq集群将多个broker将多个节点连接起来组成逻辑上独立的单个broker,但是集群也有其局限性:集群内部借助 Erlang 进行消息传输,所以 集群中的每个节点的 Erlang cookie 务必要保持一致.同时,集群内部的网络必须是可靠的,RabbitMQ Erlang 的版本也必须一致. Federation Federation 可以通过 AMQP 协议(可配置 SSL)让原本发送到某个 Broker(或集群…
1.RabbitMQ中mandatory和immediate以及备份交换机 (1)mandatory为true时,若交换机无法根据自身类型和路由键找到符合条件的对列,那么RabbitMQ会回调Basic.Return将消息返回生产者. 生产者可以调用channel.addReturnListener来添加ReturnListener实现获取被返回的消息. channel.basicPublish(EXCHANGE NAME , "", true ,MessageProperties .…
1.了解消息中间件 消息中间件,Message Queue Middleware,简称MQ,又称消息对列或消息对列中间件,利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成. 一般有两种传递方式:点对点模式,基于队列的一对一,消息生产者发送消息到对列,消费者从队列中接收消息. 发布/订阅模式,一对多,发布者将消息发布到某个主题,多个消息订阅者从主题中订阅消息. 消息中间件的作用:解耦.冗余(存储).扩展性.削峰.可恢复性.顺序保证性.缓冲.异步通信 2.初步…
  I. 消息中间件特点: 1,异步处理模式 消息发送者可以发送一个消息而无需等待响应,消息发送者将消息发送到一条虚拟的通道或队列上,消息接收者则订阅或监听该通道,一条消息可能最终转发给一个或多个消息接受者,这些接受者都无需对消息发送者做出同步回应,整个过程是异步的,如:用户注册 2,应用程序和应用程序调用关系为松耦合关系,发送者和接受者不必了解对方,只需要确认消息,发送者和接受者不必同时在线 比如在线交易系统为了保证数据一致性,在支付系统处理完成后会把支付结果放到消息中间件里通知订单系统修改订…
如果消息由生产者生产之后,没有消费端来消费(此处生产者也负责队列的创建) 在超时之后需要对消息进行删除(如果一直保留队列里,在消费端启动后消费了此消息,会和生产端的数据产生冲突,添加程序的复杂度) 因此采用生产端在超时之后创建一个消费端来消费这条消息(其实就是发送一个ask,此处的消费端最好设置noask为false) ps:超时操作里的消费端如果设置noash为true,会删除队列里的所有残留消息,就是投递后就会删除消息,不用等待消费端的ask)…
一.模式介绍 路由模式,与发布-订阅模式一样,消息发送到exchange中,消费者把队列绑定到exchange上. 这种模式在exchange上添加添加了一个路由键(routing-key),生产者发布消息的时候添加路由键(routing-key),消费者绑定队列到交换机时添加键值(routing-key),这样就可以接收到对应的消息. 路由模式的direct exchange. 队列模型: 与发布-订阅模式不同的是,每个消费者队列接收的消息不同,根据消息的routing-key把消息发送到不同…
1.浮点型 浮点数家族包括:float,double,long double. ASCII标准规定:long double 至少和 double 一样长,而 double 至少和float 一样长.同时规定浮点数范围:所有浮点数类型至少能够容纳从\(10^{-37}\)到\(10^{37}\)之间的数. 2.浮点数的表示 浮点数必须总是写成10进制的形式,它必须有一个小数点或者指数,也可以两者都有. 例如: 3.14159 1E10 25. .5 6.023e23 浮点数默认都是double类型…
RabbitMQ  原文地址: https://baijiahao.baidu.com/s?id=1577456875919174629&wfr=spider&for=pc 最新版本的RabbitMQ有四种交换机类型,分别是Direct exchange.Fanout exchange.Topic exchange.Headers exchange. Direct Exchange 处理路由键.需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配.这是一个完整的匹配.如果一个…
      Rabbitmq的核心概念(如下图所示):有虚拟主机.交换机.队列.绑定:                    交换机可以理解成具有路由表的路由程序,仅此而已.每个消息都有一个称为路由键(routing key)的属性,就是一个简单的字符串.       最新版本的RabbitMQ有四种交换机类型,分别是Direct exchange.Fanout exchange.Topic exchange.Headers exchange.       Direct Exchange – 处…
  Rabbitmq 是对AMQP协议的一种实现.使用范围也比较广泛,主要用于消息异步通讯. 一,默认情况下Rabbitmq使用轮询(round-robin)方式转发消息.为了较好实现负载,可以在消息接收方指定,每次接收到一条,这样可以缓解单一服务器压力. 代码如下: ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");connection = factory.newConne…