RabbitMQ:api
安装:浏览器
1.安装erlang开发环境。服务器
2.安装RabbitMQ,安装RabbitMQ插件,这样能够在浏览器操做Rabbit MQ;tcp
步骤:插件
rabbitMQ消息队列做为服务器,生茶者和消费者是客户端。blog
生产者步骤:rabbitmq
ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); factory.setPort(5672); factory.setUsername("guest"); factory.setPassword("guest"); factory.setVirtualHost("/");//rabbitmq默认虚拟机名称为“/”,虚拟机至关于一个独立的mq服务队列
1.经过建立一个链接工厂来来链接主机、端口号、用户名、密码。路由
2.经过这个工厂生成一个tcp链接,经过该链接建立通道。开发
3.经过通道定义一个队列
/** * 声明队列,若是Rabbit中没有此队列将自动建立 * param1:队列名称 * param2:是否持久化 * param3:队列是否独占此链接 * param4:队列再也不使用时是否自动删除此队列 * param5:队列参数 */ channel.queueDeclare(QUEUE, true, false, false, null);
4.定义一个字符串消息
5.经过通道调用api,发布该消息。
消费者步骤:
1.建立工厂。建立链接,建立通道,声明队列。
2.经过通道调用api,肯定监听哪一个队列,监听成功,而后调用哪一个方法。channel.basicConsume(QUEUE, true, consumer);
3.方法定义,经过这个方法就能够得到消息内容 DefaultConsumer consumer = new DefaultConsumer(channel) { }这个是匿名内部类,里边要实现一个handleDelivery方法,这个方法会被自动调用,能够在这个方法内处理消息。
一、发送端操做流程
1)建立链接
2)建立通道
3)声明队列
4)发送消息 二、接收端
1)建立链接
2)建立通道
3)声明队列
4)监听队列
5)接收消息
RabbitMQ消息队列使用流程文字化叙述:首先生产者即客户端,要建立链接,而后建立通道,经过通道建立交换机(声明交换机类型)和队列,而后绑定某个交换机和某个队列,而且指定路由key,这样发送消息给交换机时候,会指定路由key,而后交换机根据与本身绑定的队列看看有没有路由key相符合的,发送给它,发送wan之后,消费者监听到之后,就会调用相应的消费方法。
RabbitMQ工做模式:对于 任务太重或任务较多状况使用工做队列能够提升任务处理的速度。
1. 工做队列:使用默认的交换机(全部的队列都会和默认交换机链接,路由key是队列名字),发送消息时,路由key是队列的名字。
有两个或两个以上消费者监听同一个队列,而后轮流从队列取出消息。
一个交换机,一个队列,多个消费者。
2.发布订阅模式:适合那种注册成功,短信邮箱一块儿通知。
定义交换机,要选择交换机类型为发布订阅类型,绑定交换机和消息队列,不指定路由key,交换机会把消息发送给每个消息队列。
3.路由模式:
定义新的交换机,要选择交换机类型为路由类型,须要绑定交换机和消息队列,绑定时须要指定消息队列在这个交换机中的路由key,而后向这个交换机发布消息时
指定路由key,就会将消息发送给指定的消息队列。
4.通配符模式:有这样一个案例,根据用户的设置,来决定用户接受短信、邮件、仍是都接受,若是使用路由模式,那么一条消息根据路由key,只能匹配上短信或者邮件,不能两个都匹配,而使用通配符模式,就能够实现二者都匹配或者只匹配一个。
和路由模式同样,只是路由key设置的是带通配符的,这样就能够模糊匹配了。
5.Header模式:
header模式与routing不一样的地方在于,header模式取消routingkey,使用header中的 key/value(键值对)匹配 队列。
案例:
根据用户的通知设置去通知用户,设置接收Email的用户只接收Email,设置接收sms的用户只接收sms,设置两种 通知类型都接收的则两种通知都有效。
6.RPC模式