赞
踩
MQ全称为Message Queue,消息队列是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用出去了接收和发送应用程序同时执行的要求。
Erlang是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。
1、安装 erlang
1.1 安装准备,下载安装文件
wget
https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.r
pm
rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
修改 primary.xml.gz 的 的 sha 的加密值
cd /var/cache/yum/x86_64/6/erlang-solutions
sha1sum primary.xml.gz
vim repomd.xml
修改
结果为 sha1sum 命令结果
2、安装 erlang
yum install erlang
3、安装完成后可以用 erl 命令查看是否安装成功
erl -version
4、安装 RabbitMQ Server
4.1 安装准备,下载 RabbitMQ Server
wget
http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.1/rabbitmq-
server-3.5.1-1.noarch.rpm
4.2 安装 RabbitMQ Server
rpm --import
http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
yum install rabbitmq-server-3.5.1-1.noarch.rpm
5、 启动 RabbitMQ
5.1 配置为守护进程随系统自动启动,root 权限下执行:
chkconfig rabbitmq-server on
5.2 启动 rabbitMQ 服务
/sbin/service rabbitmq-server start
6、 安装 Web 管理界面插件
6.1 安装命令
rabbitmq-plugins enable rabbitmq_management
6.2 安装成功后会显示如下内容
The following plugins have been enabled:
mochiweb
webmachine
rabbitmq_web_dispatch
amqp_client
rabbitmq_management_agent
rabbitmq_management
Plugin configuration has changed. Restart RabbitMQ for changes
to take effect.
7、 设置 RabbitMQ 远程 ip 登录
个 这里我们以创建个 oldlu 帐号,密码 123456 为例,创建一个账号并支持远程 ip 访问。
7.1 创建账号
rabbitmqctl add_user oldlu 123456
7.2 设置用户角色
rabbitmqctl set_user_tags oldlu administrator
7.3 设置用户权限
rabbitmqctl set_permissions -p “/” oldlu “." ".” “.*”
7.4 设置完成后可以查看当前用户和角色( 需要开启服务)
rabbitmqctl list_users
浏览器输入:serverip:15672 。其中 serverip 是 是 RabbitMQ-Server 所在主机的 ip
消息提供者
消息的消费者
队列就像存放了商品的仓库或者商店,是生产商品的工厂和购买商品的用户之间的中转站
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
spring.rabbitmq.host=192.168.6.44
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin
Queue
rabbitTemplate.convertAndSend()
@RabbitListene
交换器。用来接收生产者发送的消息并将这些消息路由给服务器中的队列。
1)Direct 2)topic 3)fanout
路由键:rabbitmq决定消息投到那个队列
信道:
交换器是通过路由键和队列绑定在一起的,如果消息拥有的路由键跟队列和交换器的 路由键匹配,那么消息就会被路由到该绑定的队列中。 也就是说,消息到队列的过程中,消息首先会经过交换器,接下来交换器在通过路由 键匹配分发消息到具体的队列中。 路由键可以理解为匹配的规则。
1)TCP 的创建和销毁开销特别大。创建需要 3 次握手,销毁需要 4 次分手。
2)如果不用信道,那应用程序就会以 TCP 链接 Rabbit,高峰时每秒成千上万条链接 会造成资源巨大的浪费,而且操作系统每秒处理 TCP 链接数也是有限制的,必定造成性能 瓶颈。
3) 信道的原理是一条线程一条通道,多条线程多条通道同用一条 TCP 链接。一条 TCP 链接可以容纳无限的信道,即使每秒成千上万的请求也不会成为性能的瓶颈
将指定的消息传输给指定的队列
@RabbitListener 标注在类上面表示当有收到消息的时候,就交给 @RabbitHandler 的方法处理
绑定队列
绑定队列的名称
指定交换机
指定路由键
交换机的名称
指定交换机的类型
1)交换机
2)路由键
3)发送的消息
解决多对多的信息的处理,通过规则将一类的消息放在一起
通过注解
@RabbitListener(
bindings = @QueueBinding(
value =@Queue(value = "${mq.config.queue.error}",autoDelete = "true"),
exchange = @Exchange(value = "${mq.config.exchange}",type = ExchangeTypes.DIRECT),
key = "${mq.config.queue.error.routing.key}"
)
通过交换器将提供者发布信息,广播到消息队列中
服务注册中心是服务实现服务化管理的核心组件,类似于目录服务的作用,主要用来存储服务信息,譬如提供者 url 串、路由信息等。服务注册中心是 SOA 架构中最基础的设施
1)服务的注册
2)服务的发现
1)dubbo zookeeper
2)Springcloud Eureka
1)服务管理
2)服务依赖关系的管理
是Netflix开发的服务发现组件,基于rest的服务,springcloud将他集成在spring-cloud-Netflix中,用于spring-cloud的服务的注册发现,以及负载均衡和故障转移
1)EureKa server :提供get register等接口用于服务的注册和发现
2)Application service:将服务实例添加到eureka中
3)application client:通过eureka服务列表获取服务列表
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。