exchange

linux安装RabbitMQ

白昼怎懂夜的黑 提交于 2019-12-18 09:58:17
一、RabbitMQ概念 RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发。RabbitMQ据说具有良好的性能和时效性,同时还能够非常好的支持集群和负载部署,非常适合在较大规模的分布式系统中使用。 消息中间件的工作过程可以用生产者消费者模型来表示.即,生产者不断的向消息队列发送信息,而消费者从消息队列中消费信息.具体过程如下: 从上图可看出,对于消息队列来说,生产者,消息队列,消费者是最重要的三个概念,生产者发消息到消息队列中去,消费者监听指定的消息队列,并且当消息队列收到消息之后,接收消息队列传来的消息,并且给予相应的处理.消息队列常用于分布式系统之间互相信息的传递. Rabbit模式大概分为以下三种:单一模式、普通模式、镜像模式 单一模式: 最简单的情况,非集群模式,即单实例服务。 普通模式: 默认的集群模式。 queue创建之后,如果没有其它policy,则queue就会按照普通模式集群。对于Queue来说,消息实体只存在于其中一个节点,A、B两个节点仅有相同的元数据,即队列结构,但队列的元数据仅保存有一份,即创建该队列的rabbitmq节点(A节点),当A节点宕机,你可以去其B节点查看,./rabbitmqctl list_queues

RabbitMQ消息模式2

痴心易碎 提交于 2019-12-18 02:34:08
1、消费端限流 2、消息的ACK与重回队列 3、TTL消息 4、死信队列 消费端限流 什么是消费端的限流? 假设一个场景,首先,我们RabbitMQ服务器有上万条未处理的消息,我们随便打开一个消费者客户端,会出现下面情况: 巨量的消息瞬间全部推送过来,但是我们单个客户端无法同时处理这么多数据! 消费端限流 RabbitMQ提供的解决方案 RabbitMQ提供了一种qos(服务质量保证)功能,即在非自动确认消息的前提下,如果一定数目的消息(通过基于Consumer或者Channel设置Qos的值)未被确认前,不进行消费新的消息 Void BasicQos(uint prefetchSize, ushort prefetchCount, bool global); prefetchSize:0 不限制消息大小 prefetchSize:会告诉RabbitMQ不要同时给一个消费者推送多于N个消息,即一旦有N个消息还没有ack,则该Consumer将block(阻塞)掉,直到有消息ack Global:true\false是否将上面设置应用于Channel;简单来说,就是上面限制是Channel级别的还是Consumer级别 注意: prefetchSize和global这两项,RabbitMQ没有实现,暂且不研究; prefetch_count在no_ask=false的情况下生效

RabbitMQ的用户管理方法

こ雲淡風輕ζ 提交于 2019-12-18 01:27:02
1. 用户管理 用户管理包括增加用户,删除用户,查看用户列表,修改用户密码。 相应的命令 (1) 新增一个用户 rabbitmqctl add_user Username Password (2) 删除一个用户 rabbitmqctl delete_user Username (3) 修改用户的密码 rabbitmqctl change_password Username Newpassword (4) 查看当前用户列表 rabbitmqctl list_users 2. 用户角色 按照个人理解,用户角色可分为五类,超级管理员, 监控者, 策略制定者, 普通管理者以及其他。 (1) 超级管理员(administrator) 可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。 (2) 监控者(monitoring) 可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等) (3) 策略制定者(policymaker) 可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。 与administrator的对比

数据结构笔记17-排序技术

最后都变了- 提交于 2019-12-18 00:24:40
在排序问题中,通常将数据元素称为记录 排序的基本概念 正序:待排序序列中的记录已按关键码排好序。 逆序(反序):待排序序列中记录的排列顺序与排好序的顺序正好相反。 趟:在排序过程中,将待排序的记录序列扫描一遍称为一趟。 通常,一次排序过程需要进行多趟扫描才能完成 排序算法的性能 1.时间复杂性:基本操作。 内排序在排序过程中的基本操作: (1)比较:关键码之间的比较; (2)移动:记录从一个位置移动到另一个位置。 2.空间复杂性: 辅助存储空间。 辅助存储空间是指在数据规模一定的条件下,除了存放待排序记录占用的存储空间 之外,执行算法所需要的其他存储空间。 排序算法的存储结构 从操作角度看,排序是线性结构的一种操作,待排序记录可以用顺序存储结构 或链接存储结构存储。 插入类排序 插入排序的主要操作是插入, 其基本思想是: 每次将一个待排序的记录按其关键码的大小插入到一个已经排好序的有序序列 中,直到全部记录排好序为止。 插入类排序方法有以下两种: 直接插入排序 希尔排序 直接插入排序 基本思想:在插入第 i(i>1)个记录时,前面的 i-1个记录已经排好序。 需解决的关键问题: (1)如何构造初始的有序序列? 解决方法: 将第1个记录看成是初始有序表,然后从第2个记录起依次插入到这个有序表中,直 到将第n个记录插入。 算法描述: for (i=2; i<=n; i++) {

rabbitmq用户权限管理

馋奶兔 提交于 2019-12-17 22:49:18
原文地址: http://my.oschina.net/hncscwc/blog/262246 安装最新版本的rabbitmq(3.3.1),并启用management plugin后,使用默认的账号guest登陆管理控制台,却提示登陆失败。 翻看官方的release文档后,得知由于账号guest具有所有的操作权限,并且又是默认账号,出于安全因素的考虑,guest用户只能通过localhost登陆使用,并建议修改guest用户的密码以及新建其他账号管理使用rabbitmq(该功能是在3.3.0版本引入的)。 虽然可以以比较猥琐的方式:将ebin目录下rabbit.app中loopback_users里的<<"guest">>删除,或者在配置文件rabbitmq.config中对该项进行配置, 并重启rabbitmq,可通过任意IP使用guest账号登陆管理控制台,但始终是违背了设计者的初衷,再加上以前对这一块了解也不多,因此有必要总结一下。 1. 用户管理 用户管理包括增加用户,删除用户,查看用户列表,修改用户密码。 相应的命令 (1) 新增一个用户 rabbitmqctl add_user Username Password (2) 删除一个用户 rabbitmqctl delete_user Username (3) 修改用户的密码 rabbitmqctl change

Spring AMQP 中的核心概念

微笑、不失礼 提交于 2019-12-17 00:07:33
本文主要介绍Spring AMQP中的用于开发的核心概念 Spring AMQP 包含了两个核心的模块 spring-amqp 和 spring-rabbit . spring-amqp 模块包含了 org.springframeworks.amqp.core 包,该包里面包含了了AMQP协议里面的核心概念。本意就是该包里面的内容是一个关于AMQP协议高度抽象的层级,并不会依赖于任何具体的AMQP中间件的实现。 Message 消息 0-9-1 AMQP 协议中并没有的定义 Message 类或者接口,但是当我们在做一些基本的 操作的是时候,例如 basicPublish() 的时候,传输的内容是一个 字节数据和一些额外的分开的属性值。在 Spring AMQP 中,就定义了一个 Message 类来代表一个更通用的AMQP 域。 Message 类的主要目的就在于封装 content 和 一些属性。(实际定义和如下会有一些区别) @Data @AllArgsConstructor public class Message { private final MessageProperties messageProperties ; private final byte [ ] body ; } MessageProperties 中会定义一系诶公共的属性,比如, messageID

springboot---mq

旧时模样 提交于 2019-12-16 17:31:17
一.Direct Exchange Direct Exchange - 处理路由键。需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。这是一个完整的匹配。如果一个队列绑定到该交换机上要求路由键 “dog”,则只有被标记为“dog”的消息才被转发,不会转发dog.puppy,也不会转发dog.guard,只会转发dog。 任何发送到Direct Exchange的消息都会被转发到RouteKey中指定的Queue。 1.一般情况可以使用rabbitMQ自带的Exchange:”"(该Exchange的名字为空字符串,下文称其为default Exchange)。 2.这种模式下不需要将Exchange进行任何绑定(binding)操作 3.消息传递时需要一个“RouteKey”,可以简单的理解为要发送到的队列名字。 4.如果vhost中不存在RouteKey中指定的队列名,则该消息会被抛弃。 Channel channel = connection.createChannel(); channel.exchangeDeclare("exchangeName", "direct"); //direct fanout topic channel.queueDeclare("queueName"); channel.queueBind("queueName",

Springboot配置多数据源Rabbitmq

岁酱吖の 提交于 2019-12-16 12:36:23
  在上一篇我们提到了如何在Springboot项目中搭建单个Rabbitmq,但是当我们遇到多数据源Rabbitmq的时候,需要怎么做呢?   我们首先看application.yml文件 spring: rabbitmq: rabbitmq: cart-order: virtual-host: / host: localhost port: 5672 username: guest password: guest order-adaptor: virtual-host: / host: localhost port: 5672 username: test password: 123456 listener: simple: concurrency: 10 max-concurrency: 20 prefetch: 5 mq: env: test cart: place: order: queue: ${mq.env}.cart.place.order.queue exchange: ${mq.env}.cart.place.order.exchange routing: key: ${mq.env}.cart.place.order.routing.key ticketing: place: order: queue: ${mq.env}.ticketing.place

spring整合RabbitMQ

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

Spring简单整合RabbitMQ

試著忘記壹切 提交于 2019-12-16 01:33:37
Spring简单整合RabbitMQ RabbitMQ整合 SpringCloud实战 RabbitMQ整合 SpringCloud实战 注意一点,在发送消息的时候对template进行配置mandatory=true保证监听有效 生产端还可以配置其他属性,比如发送重试,超时时间、次数、间隔等 消费端核心配置 首先配置手工确认模式,用于ACK的手工处理,这样我们可以保证消息的可靠性送达,或者在消费端消费失败的时候可以做到重回队列、根据业务记录日志等处理 可以设置消费端的监听个数和最大个数,用于控制消费端的并发情况 @RabbitListener注解的使用 消费端监听@RabbitListener注解,这个对于在实际工作中非常的好用 @RabbitListener是一个组合注解,里面可以注解配置(@QueueBinding、@Queue、@Exchange)直接通过这个组合注解一次性搞定消费端交换机、队列、绑定、路由、并且配置监听功能等 注:由于类配置写在代码里非常不友好,所以强烈建议大家使用配置文件配置 创建SpringCloud相关子项目 rabbitmq-common entity类 package com . chen . rabbitmqcommon . entity ; import java . io . Serializable ; public class