
MQ
文章平均质量分 63
ljz2016
这个作者很懒,什么都没留下…
展开
-
Java使用RabbitMQ(三)--消息确认
消息确认 RabbitMQ 每将一个消息交付给一个消费者时,会立刻把这个消息标记为被删除,如果消费者在处理消息时怠机了,那么这个消息就彻底消失了,这很明显不符合我们的期望,我们希望在一个消费者怠机时,把这个消息交付给其他消费者处理。 所以 RabbitMQ 让消费者在处理完消息后,返回确认消息,告知RabbitMQ 你确实可以删除这条消息了。 也就是 channel.basicCons...原创 2018-04-16 16:44:43 · 1354 阅读 · 0 评论 -
自定义访问rabbitmq的框架(二)
RabbitMQHelper这个类,用于声明交换机,声明队列、发送消息等操作。 dedicatedChannels 用于存放当前线程中的信道,声明交换机、队列等操作发生在多个方法中,为了共享信道,所以放在局部线程变量中。public class RabbitMQHelper { protected final Logger logger = LoggerFactory.getLogg...原创 2018-08-20 09:51:30 · 364 阅读 · 0 评论 -
自定义访问rabbitmq的框架(一)
这是由spring amqp框架简化而来的一个自定义框架,去除了很多平时用不到的东西,同时也根据自己的需要,在特定的地方做了一些修改。核心类是下面的4个: CacheConnectionFactory 这个工厂,缓存了连接和信道 UdConsumerContainer 消费者池 BlockingQueueConsumer 消费者 RabbitMQHelper 帮助类(提供了各种...原创 2018-08-10 16:32:31 · 469 阅读 · 0 评论 -
RabbitMQ安装
RabbitMQ安装步骤首先,安装二浪(ErLang)语言环境:在http://www.erlang.org/downloads下载 新建一个变量ERLANG_HOME 值为本机中erlang的安装目录,PATH中添加上%ERLANG_HOME%\bin; cmd执行erl -version查看安装是否成功 安装RabbitMQ本身去官网下载最新的rabbitM...原创 2018-04-16 09:55:52 · 215 阅读 · 0 评论 -
Java使用RabbitMQ(二)--发送和接收信息
发送和接收信息发送方:public class BaseTest2 { public static String queueName="q1"; public static ConnectionFactory factory; public static Connection getConnection(String username,String passw...原创 2018-04-16 16:07:20 · 2376 阅读 · 0 评论 -
Java使用RabbitMQ(一)--基本用法
关于java使用rabbitMq的基本用法创建连接 public static ConnectionFactory factory; public static Connection getConnection(String username,String password,String host,int port,String virtualhost) { ...原创 2018-04-16 10:59:38 · 2767 阅读 · 0 评论 -
Java使用RabbitMQ(四)--消息持久化
消息持久化 消息确认,保证了消费者die时,消息不丢失。 而消息持久化,则是为了保证RabbitMQ 怠机时,消息不丢失。消息持久化需要以下操作:boolean durable = true;channel.queueDeclare("hello", durable, false, false, null);需要注意的是,RabbitMQ不允许修改已经定义过的队列的属性,所以...原创 2018-04-17 09:20:36 · 1913 阅读 · 2 评论 -
Java使用RabbitMQ(五)--消息分发策略
消息分发策略 RabbitMQ默认的消息分发策略是公平分发(Fair dispatch),把消息轮流发给每个worker者。 这样有个问题:某个worker很忙的 时候,会累积大量的消息,导致异常、内存溢出等问题。 一个解决方案是:设置某一时间只给一个worker者发送一条消息,在没有收到ack消息回应时,不给发第二个。int prefetchCount = 1;channel.b...原创 2018-04-17 09:31:42 · 1804 阅读 · 0 评论 -
Java使用RabbitMQ(六)--订阅发布
发布订阅模式 这一篇主要是java 客户端使用rabbitMQ发布和订阅消息。 前面几篇讲的是将一个消息只发给一个worker,这里讲的是将一个消息同时发给多个订阅者,也就是发布/订阅模式。为了阐明这种模式,这里将创建一个简单的日志系统,这个系统由2部分组成:第一部分,发送日志消息;第二部分接收和打印日志消息。在这个日志系统中,复制了一份receiver,一个接收者用来把收到的消息存储...原创 2018-04-17 10:53:10 · 2402 阅读 · 0 评论 -
Java使用RabbitMQ(七)--Routing
Routing 路由选择 前面的文章 介绍了,怎么广播消息到多个接收者,这一篇将怎么订阅消息的子集。比如指定一个消费者只把 错误日志写入磁盘,另一个消费者仍然能够将所有的日志消息打印到屏幕上。Binding 一个Binding描述的是交换机和队列之间的关系,比如描述 某个队列对这个交换机中的哪些消息感兴趣。channel.queueBind(queueName, EXCHANGE...原创 2018-04-17 13:51:12 · 209 阅读 · 0 评论 -
Java使用RabbitMQ(八)--Topics
topics使用 虽然上一篇的direct交换机改善了我们的系统,但是它依然有限制–不能处理在复杂条件下的路由分发。比如同时根据 日志重要级别和角色来获取。所以这里介绍另一个复杂点的交换机 topic。 topic交换机也是通过 routing_key 来筛选信息的,routing_key 的格式有要求,用.分隔,*表示一个词,#表示多个词。quick.orange.rabbit会...原创 2018-04-17 15:00:58 · 214 阅读 · 0 评论 -
Semaphore--信号量类解析
首先是相关类的关系图原创 2018-04-24 15:42:41 · 182 阅读 · 0 评论 -
Java使用RabbitMQ(十)--常用操作以及注意事项
为了防止众所周知的身份信息用于生产环境的系统,guest只能用来访问本地。channel可以主动关闭,但是这不是必须的,在关闭它所依赖的连接时,channel也会自动被关闭。connection设计为长连接。有个no wait 版本的队列channel.queueDeclareNoWait(queueName, true, false, false, null);这种队列不接收...原创 2018-04-18 16:12:29 · 1679 阅读 · 0 评论 -
Java使用RabbitMQ(九)--RPC
首先声明: RPC调用会增加系统复杂度以及调试难度, 容易使代码混乱,系统缓慢。尽量避免使用RPC,转而使用异步管道替代。rabbitMQ实现的RPC主要流程:客户端启动后,创建一个匿名唯一的回调队列对于一个RPC请求,客户端发送一个消息和2个属性,一个是replyto用来设置回调队列,另一个是correlationId,每个请求的值都是唯一的RPC worker(也是被调用...原创 2018-04-18 14:44:24 · 295 阅读 · 0 评论 -
自定义访问rabbitmq的框架(三)
UdConsumerContainer这个类是用于消费端的,复用信道池。public void start() throws Exception,调用start方法,会绑定所有消费者到相应的队列(每个消费者绑定的队列可以不同)。这个类的处理模式是,先将消息缓存到本地队列中,然后用户自定义的消息处理器再从本地队列中获取并处理,根据设定的消息队列处理模式,给予rabbitmq相应的回应。B...原创 2018-08-20 10:03:17 · 839 阅读 · 0 评论