一、主流的消息中间件简单介绍哦。java
1)、ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线,而且它一个彻底支持jms(java message service)规范的消息中间件。其丰富的api,多种集群构建模式使得他成为业界老牌消息中间件,在中小企业中应用普遍。
若是不是高并发的系统,对于ActiveMQ,是一个不错的选择的,丰富的api,让你开发的很愉快哟。
注意:MQ衡量指标:服务性能,数据存储,集群架构。node
2)、kafka是LinkedIn开源的分布式发布/订阅消息系统,目前归属于Apache顶级项目。kafka主要特色是基于Pull的模式来处理消息消费,最求高吞吐量,一开始的目的就是用于日志收集和传输,0.8版本开始支持复制,不支持事务,对消息的重复,丢失,错误没有严格要求,适量产生大量数据的互联网服务的数据收集业务。web
3)、RocketMQ是阿里开源的消息中间件,目前也已经孵化为了Apache顶级项目,它是纯java开发,具备高吞吐量、高可用性、适合大规模分布式系统应用的特色。RocketMQ思路起源于kafka,它对消息的可靠传输以及事务性作了优化,目前在阿里集团被普遍用于交易,充值,流计算、消息推送、日志流式处理,binglog分发等场景。vim
4)、RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现的。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅模式)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。
centos
二、RabbitMQ的简单介绍。api
RabbitMQ是一个开源的消息代理和队列服务器,用来经过普通协议在彻底不一样的应用之间共享数据,RabbitMQ是使用Erlang语言来编写的,而且RabbitMQ是基于AMQP协议的。
浏览器
三、RabbitMQ高性能的缘由所在是什么呢?
答:RabbitMQ所使用的开发语言是ErLang语言,ErLang其最初在于交换机领域的架构模式,这样使得RabbitMQ在Broker之间进行数据交互的性能是很是优秀的。Erlang的优势,Erlang有着和原生Socket同样的延迟。性能十分优越。安全
四、AMQP高级消息队列协议是什么?
答:AMQP全称是Advanced Message Queuing Protocol(高级消息队列协议)。AMQP定义是具备现代特征的二进制协议。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。服务器
五、AMQP协议模型。
网络
详细介绍以下所示:
1)、Server,又称为Broker,接受客户端的链接,实现AMQP实体服务。
2)、Connection,链接,应用程序与Broker的网络链接。
3)、Channel,网络信道,几乎全部的操做都在Channel中进行,Channel是进行消息读写的通道。客户端可创建多个Channel,每一个Channel表明一个会话任务。
4)、Message,消息,服务器和应用程序之间传送的数据,由Properties和Body组成。Propertie能够对消息进行修饰,好比消息的优先级,延迟等高级特性,Body则就是消息体内容。
5)、Virtual Host,虚拟地址,用于进行逻辑隔离,最上层的消息路由。一个Virtual Host里面能够有若干个Exchange和Queue,同一个Virtual Host里面不能有相同名称的Exchange或者Queue。
6)、Exchange,交换机,接受消息,根据路由键转发消息到绑定的队列。
7)、Binding,Exchange和Queue之间的虚拟链接,binding中能够包含routing key。
8)、Routing key,一个路由规则,虚拟机能够用它来肯定如何路由一个特定消息。
9)、Queue,也称为Message Queue,消息队列,保存消息并将它们转发给消费者。
六、RabbitMQ的架构设计以下所示:
七、RabbitMQ的安装。RabbitMQ的官方网址:https://www.rabbitmq.com/
能够选择本身RabbitMQ的版本,以及对应的Erlang的版本。这里使用rabbitmq-server-3.6.5-1.noarch.rpm一键安装方式进行安装RabbitMQ的方式。
搭建RabbitMQ所需包:
a)、erlang-18.3-1.el7.centos.x86_64.rpm这个是erlang语言基础安装包。
b)、rabbitmq-server-3.6.5-1.noarch.rpm这个是rabbitmq服务端安装包。
c)、socat-1.7.3.2-1.1.el7.x86_64.rpm这个是socat密钥。
能够下载安装包,而后进行安装便可:
1 wget www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm 2 wget http://repo.iotti.biz/CentOS/7/x86_64/socat-1.7.3.2-5.el7.lux.x86_64.rpm 3 wget www.rabbitmq.com/releases/rabbitmq-server/v3.6.5/rabbitmq-server-3.6.5-1.noarch.rpm
首先安装Erlang的语言基础安装包,安装过程以下所示:
1 [root@slaver4 package]# ls 2 erlang-18.3-1.el7.centos.x86_64.rpm haproxy-1.6.5.tar.gz keepalived-1.2.18.tar.gz rabbitmq_delayed_message_exchange-0.0.1.ez rabbitmq-server-3.6.5-1.noarch.rpm socat-1.7.3.2-1.1.el7.x86_64.rpm 3 [root@slaver4 package]# rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm 4 Preparing... ################################# [100%] 5 Updating / installing... 6 1:erlang-18.3-1.el7.centos ################################# [100%] 7 [root@slaver4 package]#
开始安装密钥包,以下所示:
1 [root@slaver4 package]# rpm -ivh socat-1.7.3.2-1.1.el7.x86_64.rpm 2 warning: socat-1.7.3.2-1.1.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 87e360b8: NOKEY 3 Preparing... ################################# [100%] 4 Updating / installing... 5 1:socat-1.7.3.2-1.1.el7 ################################# [100%] 6 [root@slaver4 package]#
开始安装rabbitmq服务器端,以下所示:
1 [root@slaver4 package]# rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm 2 warning: rabbitmq-server-3.6.5-1.noarch.rpm: Header V4 RSA/SHA1 Signature, key ID 6026dfca: NOKEY 3 Preparing... ################################# [100%] 4 Updating / installing... 5 1:rabbitmq-server-3.6.5-1 ################################# [100%] 6 [root@slaver4 package]#
八、rpm安装方式已经帮助你配置好了环境这些东西,比解压缩安装好点,由于解压缩安装还须要手动配置环境变量的。接下来,配置一下RabbitMQ。配置以下所示:
1 [root@slaver4 package]# cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/ 2 [root@slaver4 ebin]# ls 3 background_gc.beam rabbit_epmd_monitor.beam rabbit_plugins_main.beam 4 delegate.beam rabbit_error_logger.beam rabbit_plugins_usage.beam 5 delegate_sup.beam rabbit_error_logger_file_h.beam rabbit_policies.beam 6 dtree.beam rabbit_exchange.beam rabbit_policy.beam 7 file_handle_cache.beam rabbit_exchange_parameters.beam rabbit_prelaunch.beam 8 file_handle_cache_stats.beam rabbit_exchange_type_direct.beam rabbit_prequeue.beam 9 gatherer.beam rabbit_exchange_type_fanout.beam rabbit_priority_queue.beam 10 gm.beam rabbit_exchange_type_headers.beam rabbit_queue_consumers.beam 11 lqueue.beam rabbit_exchange_type_invalid.beam rabbit_queue_index.beam 12 mirrored_supervisor_sups.beam rabbit_exchange_type_topic.beam rabbit_queue_location_client_local.beam 13 mnesia_sync.beam rabbit_file.beam rabbit_queue_location_min_masters.beam 14 mochinum.beam rabbit_framing.beam rabbit_queue_location_random.beam 15 pg2_fixed.beam rabbit_guid.beam rabbit_queue_location_validator.beam 16 pg_local.beam rabbit_hipe.beam rabbit_queue_master_location_misc.beam 17 rabbit_access_control.beam rabbit_limiter.beam rabbit_recovery_terms.beam 18 rabbit_alarm.beam rabbit_log.beam rabbit_registry.beam 19 rabbit_amqqueue_process.beam rabbit_memory_monitor.beam rabbit_resource_monitor_misc.beam 20 rabbit_amqqueue_sup.beam rabbit_mirror_queue_coordinator.beam rabbit_restartable_sup.beam 21 rabbit_amqqueue_sup_sup.beam rabbit_mirror_queue_master.beam rabbit_router.beam 22 rabbit.app rabbit_mirror_queue_misc.beam rabbit_runtime_parameters.beam 23 rabbit_auth_mechanism_amqplain.beam rabbit_mirror_queue_mode_all.beam rabbit_sasl_report_file_h.beam 24 rabbit_auth_mechanism_cr_demo.beam rabbit_mirror_queue_mode.beam rabbit_ssl.beam 25 rabbit_auth_mechanism_plain.beam rabbit_mirror_queue_mode_exactly.beam rabbit_sup.beam 26 rabbit_autoheal.beam rabbit_mirror_queue_mode_nodes.beam rabbit_table.beam 27 rabbit.beam rabbit_mirror_queue_slave.beam rabbit_trace.beam 28 rabbit_binding.beam rabbit_mirror_queue_sync.beam rabbit_upgrade.beam 29 rabbit_boot_steps.beam rabbit_mnesia.beam rabbit_upgrade_functions.beam 30 rabbit_channel_sup.beam rabbit_mnesia_rename.beam rabbit_variable_queue.beam 31 rabbit_channel_sup_sup.beam rabbit_msg_file.beam rabbit_version.beam 32 rabbit_cli.beam rabbit_msg_store.beam rabbit_vhost.beam 33 rabbit_client_sup.beam rabbit_msg_store_ets_index.beam rabbit_vm.beam 34 rabbit_connection_helper_sup.beam rabbit_msg_store_gc.beam supervised_lifecycle.beam 35 rabbit_connection_sup.beam rabbit_node_monitor.beam tcp_listener.beam 36 rabbit_control_main.beam rabbit_parameter_validation.beam tcp_listener_sup.beam 37 rabbit_ctl_usage.beam rabbit_password.beam truncate.beam 38 rabbit_dead_letter.beam rabbit_password_hashing_md5.beam vm_memory_monitor.beam 39 rabbit_diagnostics.beam rabbit_password_hashing_sha256.beam worker_pool.beam 40 rabbit_direct.beam rabbit_password_hashing_sha512.beam worker_pool_sup.beam 41 rabbit_disk_monitor.beam rabbit_plugins.beam worker_pool_worker.beam 42 [root@slaver4 ebin]# vim rabbit.app
修改内容如是:{loopback_users, <<"guest">>},修改成{loopback_users, [guest]}。这个是用户的设置。必须修改的。
九、RabbitMQ安装成功之后,就能够进行RabbitMQ的服务启动和中止。
1 [root@slaver4 ~]# rabbitmq-server start & 2 [1] 14092 3 [root@slaver4 ~]# 4 RabbitMQ 3.6.5. Copyright (C) 2007-2016 Pivotal Software, Inc. 5 ## ## Licensed under the MPL. See http://www.rabbitmq.com/ 6 ## ## 7 ########## Logs: /var/log/rabbitmq/rabbit@slaver4.log 8 ###### ## /var/log/rabbitmq/rabbit@slaver4-sasl.log 9 ########## 10 Starting broker... 11 completed with 0 plugins. 12 13 [root@slaver4 ~]#
启动完成之后,如何验证启动是否正常呢,使用以下命令能够查看RabbitMQ启动是否正常。能够看到RabbitMQ的进程号,以及协议名称等等。
1 [root@slaver4 ~]# lsof -i:5672 2 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME 3 beam 14206 rabbitmq 48u IPv6 70172 0t0 TCP *:amqp (LISTEN) 4 [root@slaver4 ~]#
如何中止RabbitMQ呢,可使用以下所示中止方式,以下所示:
1 [root@slaver4 ~]# rabbitmqctl stop 2 Stopping and halting node rabbit@slaver4 ... 3 Gracefully halting Erlang VM
可使用[root@slaver4 ~]# rabbitmq-plugins list命令查看默认提供了什么样的插件。
1 [root@slaver4 ~]# rabbitmq-plugins list 2 Configured: E = explicitly enabled; e = implicitly enabled 3 | Status: * = running on rabbit@slaver4 4 |/ 5 [ ] amqp_client 3.6.5 6 [ ] cowboy 1.0.3 7 [ ] cowlib 1.0.1 8 [ ] mochiweb 2.13.1 9 [ ] rabbitmq_amqp1_0 3.6.5 10 [ ] rabbitmq_auth_backend_ldap 3.6.5 11 [ ] rabbitmq_auth_mechanism_ssl 3.6.5 12 [ ] rabbitmq_consistent_hash_exchange 3.6.5 13 [ ] rabbitmq_event_exchange 3.6.5 14 [ ] rabbitmq_federation 3.6.5 15 [ ] rabbitmq_federation_management 3.6.5 16 [ ] rabbitmq_jms_topic_exchange 3.6.5 17 [ ] rabbitmq_management 3.6.5 18 [ ] rabbitmq_management_agent 3.6.5 19 [ ] rabbitmq_management_visualiser 3.6.5 20 [ ] rabbitmq_mqtt 3.6.5 21 [ ] rabbitmq_recent_history_exchange 1.2.1 22 [ ] rabbitmq_sharding 0.1.0 23 [ ] rabbitmq_shovel 3.6.5 24 [ ] rabbitmq_shovel_management 3.6.5 25 [ ] rabbitmq_stomp 3.6.5 26 [ ] rabbitmq_top 3.6.5 27 [ ] rabbitmq_tracing 3.6.5 28 [ ] rabbitmq_trust_store 3.6.5 29 [ ] rabbitmq_web_dispatch 3.6.5 30 [ ] rabbitmq_web_stomp 3.6.5 31 [ ] rabbitmq_web_stomp_examples 3.6.5 32 [ ] sockjs 0.3.4 33 [ ] webmachine 1.10.3
那么安装RabbitMQ成功之后,如何安装管理台或者管控台的插件呢,以下所示操做:
1 [root@slaver4 ~]# rabbitmq-plugins enable rabbitmq_management 2 The following plugins have been enabled: 3 mochiweb 4 webmachine 5 rabbitmq_web_dispatch 6 amqp_client 7 rabbitmq_management_agent 8 rabbitmq_management 9 10 Applying plugin configuration to rabbit@slaver4... started 6 plugins. 11 [root@slaver4 ~]#
安装好管控台插件之后就可使用浏览器进行验证(管控台的默认端口号是15672,5672是java端通讯的端口号,25672是集群进行通讯的端口号),访问地址如是:http://192.168.110.133:15672/。帐号和密码默认就是guest哟。
十、命令行和管控台的基本操做。
1 经常使用命令以下所示: 2 # 关闭应用 3 [root@slaver4 ~]# rabbitmqctl stop_app 4 # 启动应用 5 [root@slaver4 ~]# rabbitmqctl start_app 6 # 节点状态,查看集群节点状态是什么样子的 7 [root@slaver4 ~]# rabbitmqctl status 8 # 添加用户 9 [root@slaver4 ~]# rabbitmqctl add_user username password 10 # 列出全部用户 11 [root@slaver4 ~]# rabbitmqctl list_users 12 # 删除用户 13 [root@slaver4 ~]# rabbitmqctl delete_user username 14 # 清除用户权限 15 [root@slaver4 ~]# rabbitmqctl clear_permissions -p vhostpath username 16 # 列出用户权限 17 [root@slaver4 ~]# rabbitmqctl list_user_permissions username 18 # 修改用户密码 19 [root@slaver4 ~]# rabbitmqctl change_password username newpassword 20 # 设置用户权限 21 [root@slaver4 ~]# rabbitmqctl set_permissions -p vhostpath username ".*" ".*" ".*" 22 23 RabbitMQ支持对虚拟主机,交换机,队列这些进行操做。经常使用命令以下所示: 24 # 建立虚拟主机 25 [root@slaver4 ~]# rabbitmqctl add_vhost vhostpath 26 # 列出全部虚拟主机 27 [root@slaver4 ~]# rabbitmqctl list_vhosts 28 # 列出虚拟主机上全部权限 29 [root@slaver4 ~]# rabbitmqctl list_permissions -p vhostpath 30 # 删除虚拟主机 31 [root@slaver4 ~]# rabbitmqctl delete_vhosts vhostpath 32 # 列出全部队列信息 33 [root@slaver4 ~]# rabbitmqctl list_queues 34 # 清除队列里的信息 35 [root@slaver4 ~]# rabbitmqctl -p vhostpath purge_queue blue 36 37 命令行和管控台的高级操做。 38 # 移除全部数据,要在rabbitmqctl stop_app以后使用 39 [root@slaver4 ~]# rabbitmqctl reset 40 # 组成集群命令,ram是加入节点的时候能够指定存储模式。 41 [root@slaver4 ~]# rabbitmqctl join_cluster <clusternode> [--ram] 42 # 查看集群的状态 43 [root@slaver4 ~]# rabbitmqctl cluster_status 44 # 修改集群节点的存储形式 45 [root@slaver4 ~]# rabbitmqctl change_cluster_node_type disc | ram 46 # 忘记节点(摘除节点) 47 [root@slaver4 ~]# rabbitmqctl forget_cluster_node [--offline] 48 # 修改节点名称 49 [root@slaver4 ~]# rabbitmqctl rename_cluster_node oladnode1 newnode1 [oldnode2] [newnode2...]
命令行能够操做的命令,在管控台也能够进行响应的操做,下面是管控台的菜单栏介绍:
十一、RabbitMQ的消息生产和消息。
生产者生产消息的代码以下所示:
1 package com.example.bie; 2 3 import java.io.IOException; 4 import java.util.concurrent.TimeoutException; 5 6 import com.rabbitmq.client.AMQP.BasicProperties; 7 import com.rabbitmq.client.Channel; 8 import com.rabbitmq.client.Connection; 9 import com.rabbitmq.client.ConnectionFactory; 10 11 /** 12 * 13 * @author biehl 14 * 15 * ConnectionFactory,获取链接工厂。 16 * 17 * Connection,一个链接。 18 * 19 * Channel,数据通讯信道,能够发送和接受消息。 20 * 21 * Queue,具体的消息存储队列。 22 * 23 * Producer和Consumer,生产和消费者。 24 */ 25 public class RabbitMqProducer { 26 27 public static void main(String[] args) { 28 try { 29 // 一、建立一个ConnectionFactory 30 ConnectionFactory connectionFactory = new ConnectionFactory(); 31 // 配置服务器ip地址,端口号,虚拟主机 32 connectionFactory.setHost("192.168.110.133"); 33 connectionFactory.setPort(5672); 34 connectionFactory.setVirtualHost("/"); 35 36 // 二、建立链接工厂建立链接 37 Connection connection = connectionFactory.newConnection(); 38 39 // 三、经过connection建立一个Channel 40 Channel channel = connection.createChannel(); 41 42 // 四、经过Channel发送数据。消息组成部分就是props(即消息的附加属性)和body(消息实体)。 43 // 生产者发送消息,只须要指定exchange和routingKey。 44 String exchange = "";// 数据通讯信道,交换机,接受消息,根据路由键转发消息到绑定的队列。 45 // 一个路由规则,虚拟机能够用它来肯定如何路由一个特定消息。 46 String routingKey = "queue001"; 47 BasicProperties props = null;// 消息的附加属性 48 // 循环发送消息 49 System.out.println("开始生产消息......"); 50 for (int i = 0; i < 100; i++) { 51 // 消息实体 52 // String msg = "Hello RabbitMQ!"; 53 byte[] body = (String.valueOf(i) + " hello RabbitMQ!!!").getBytes(); 54 // 若是exchange是空的话,会使用AMQP default这个Exchange。 55 // 而后会根据routingKey的名称去队列里面找到名称对应的,而后将消息路由过去。 56 channel.basicPublish(exchange, routingKey, props, body); 57 } 58 59 // 五、关闭链接,原则,由小到大进行关闭 60 channel.close(); 61 connection.close(); 62 } catch (IOException e) { 63 e.printStackTrace(); 64 } catch (TimeoutException e) { 65 e.printStackTrace(); 66 } 67 } 68 69 }
消费者消费消息的代码以下所示:
1 package com.example.bie; 2 3 import java.io.IOException; 4 import java.util.HashMap; 5 import java.util.Map; 6 import java.util.concurrent.TimeoutException; 7 8 import com.rabbitmq.client.AMQP.Queue.DeclareOk; 9 import com.rabbitmq.client.Channel; 10 import com.rabbitmq.client.Connection; 11 import com.rabbitmq.client.ConnectionFactory; 12 import com.rabbitmq.client.Consumer; 13 import com.rabbitmq.client.ConsumerCancelledException; 14 import com.rabbitmq.client.QueueingConsumer; 15 import com.rabbitmq.client.QueueingConsumer.Delivery; 16 import com.rabbitmq.client.ShutdownSignalException; 17 18 /** 19 * 20 * @author biehl 21 * 22 */ 23 public class RabbitMqConsumer { 24 25 public static void main(String[] args) { 26 try { 27 // 一、建立一个ConnectionFactory 28 ConnectionFactory connectionFactory = new ConnectionFactory(); 29 // 配置服务器ip地址,端口号,虚拟主机 30 connectionFactory.setHost("192.168.110.133"); 31 connectionFactory.setPort(5672); 32 connectionFactory.setVirtualHost("/"); 33 34 // 二、建立链接工厂建立链接 35 Connection connection = connectionFactory.newConnection(); 36 37 // 三、经过connection建立一个Channel 38 Channel channel = connection.createChannel(); 39 40 // 四、建立(声明)一个队列 41 String queue = "queue001";// 队列 42 boolean durable = true;// 是否持久化,true是持久化,false是不持久化 43 // 独占的方式,只有一个channel能够去监听,其余channel不能进行监听。保证了顺序消费。 44 boolean exclusive = false; 45 boolean autoDelete = false;// 队列没有和Exchange绑定,就进行自动删除 46 // 扩展参数 47 Map<String, Object> arguments = new HashMap<String, Object>(); 48 DeclareOk declareOk = channel.queueDeclare(queue, durable, exclusive, autoDelete, arguments); 49 System.out.println("consumerCount: " + declareOk.getConsumerCount()); 50 51 // 五、建立消费者,指定参数,消费者创建在那个channel链接之上 52 QueueingConsumer queueingConsumer = new QueueingConsumer(channel); 53 54 // 六、对channel进行设置。queue是设置要消费的队列名称。 55 boolean autoAck = true;// 是否自动签收。 56 Consumer callback = queueingConsumer;// 57 channel.basicConsume(queue, autoAck, callback); 58 59 // 七、获取消息 60 // 消费者建立起来了,消费者监听的队列建立起来了。接下来就获取消息。 61 // delivery是消息封装的对象 62 System.out.println("等待消费......"); 63 while (true) { 64 // 获取消息 65 Delivery delivery = queueingConsumer.nextDelivery(); 66 String body = new String(delivery.getBody()); 67 System.out.println("消费端body: " + body); 68 System.out.println("envelope" + delivery.getEnvelope().toString()); 69 } 70 71 // 八、关闭链接,原则,由小到大进行关闭 72 // channel.close(); 73 // connection.close(); 74 } catch (IOException e) { 75 e.printStackTrace(); 76 } catch (TimeoutException e) { 77 e.printStackTrace(); 78 } catch (ShutdownSignalException e) { 79 e.printStackTrace(); 80 } catch (ConsumerCancelledException e) { 81 e.printStackTrace(); 82 } catch (InterruptedException e) { 83 e.printStackTrace(); 84 } 85 } 86 87 }
实现的效果,除了控制台的输出,你也能够在管控台里面查看对应的效果,如链接Connection的个数、Channel的个数、Exchange的个数、Queue的个数、Consumer的个数、以及主页折线图展现的最新消息个数、消费速率等等信息。观察这些变化以达到监控的目的。
十二、RabbitMQ的Exchange交换机,Exchange接受消息,而且根据路由键转发消息所绑定的队列。交换机的属性以下所示:
a)、Name:交换机的名称。
b)、Type:交换机的类型direct,topic,fanout,headers。
1)、Direct Exchange(即直连交换机),全部发送到Direct Exchange的消息被转发到RouteKey中指定的Queue。
注意:Direct模式可使用RabbitMQ自带的Exchange,default Exchange,因此不须要将Exchange进行任何绑定(binding)操做,消息传递时,RouteKey必须彻底匹配才会被队列接收,不然该消息会被抛弃。
2)、Topic Exchange(即话题交换机),全部发送到Topic Exchange的消息被转发到全部关心RouteKey中指定Topic的Queue上。Exchange将RouteKey和某Topic进行模糊匹配,此时队列须要绑定一个Topic。注意:可使用通配符进行模糊匹配。符号,"#"匹配一个或者多个词,符号"*"匹配很少很多一个词。
3)、Fanout Exchange,不处理路由键,只须要简单的将队列绑定到交换机上面。发送到交换机的消息都会被转发到与该交换机绑定的全部队列上面。Fanout交换机转发消息是最快的。
4)、Headers Exchange,根据消息头进行路由,不是很经常使用。
c)、Durability:是否须要持久化,true为持久化。
d)、Auto Delete:当最后一个绑定到Exchange上的队列删除后,自动删除该Exchange。
e)、Internal:当前Exchange是否用于RabbitMQ内部使用,默认为false。
f)、Arguments:扩展参数,用户扩展AMQP协议自制定化使用。
做者:别先生
博客园:https://www.cnblogs.com/biehongli/
若是您想及时获得我的撰写文章以及著做的消息推送,能够扫描上方二维码,关注我的公众号哦。