JMS-Java Message Service
基本概念:
- JMS-Java Mesasge Service,即Java消息服务。支持两种通信模型:
- 点对点,Point-2-Point,消息产生后,被发到一个Queue中;消息接收者从Queue中读取,之后msg消失。一对一
- 发布/订阅,pub/Sub,消息产生后,被发到一个Topic中,这个topic可以同时有多个接收者在监听,当一个消息到达topic后,所有的消息接收者都会收到这个消息。 一对多。
- Destination,消息发送的目的地,也就是queue、topic。消息被创建好之后,只要发送到destination,消息的发送者就不需要关心消息了,后续的消费什么时间发生,由谁来消费,完全取决于消息的接收者。
- Message:消息,用于传递内容的载体,包含以下几种类型
- StreamMessage,java数据流消息
- MapMessage,一个Map类型的消息,key为string类型,value为java基本类型
- TextMessage,普通字符串消息,包含一个String,较常用
- ObjectMessage,对象消息,包含一个可序列化的java对象,较常用
- BytesMessage,二进制数组消息
- XMLMessage,xml类型的消息
- ConnectionFactory,工厂类,用于生成Connection
- Connection,与JMS提供者建立的一个连接,可以从这个连接创建一个session
- Session 与JMS提供者建立的会话,通过session我们才可以创建一个message
- JMS提供者,提供queue、topic、connection、session管理的服务器,比如rabbitmq、rocketmq等
但是JMS目前并没有大规模应用,而且JMS仅适用于Java语言,所以就有了AMQP(Advanced Message Queue Protocal)。RabbitMQ是基于Erlang语言的AMQP协议实现。
RabbitMQ《RabbitMQ实战指南》推荐一读
安装
需要先安装erlang,这里使用19.3版本:
下面是安装过程(centos 6.6),注意,erlang的版本跟rabbitmq的版本还是有相关性的,这里只试验了19.3版本erlang与后续的rabbitmq搭配没问题
aria2c http://erlang.org/download/otp_src_19.3.tar.gz
tar -zxvf otp_src_19.3.tar.gz
cd otp_src_19.3
./configure --prefix=/opt/erlang #这里指定安装erlang的目录,防止直接安装到/usr目录去,卸载起来麻烦
# 如果出现类似 No curses Library .... 这种报错,执行以下:
# yum install ncurses-devel
make
make install # erlang没有提供 make uninstall的命令,想卸载,直接删除/opt/erlang即可
vim /etc/profile # 添加环境变量
export ERLANG_HOME=/opt/erlang
export PATH=$PATH:$ERLANG_HOME/bin
source /etc/profile # 生效环境变量
erl # 试验erlang是否已经安装成功,会进入交互模式,ctrl+G 切换输入模式,输入q 回车退出
安装rabbitmq
这里使用的是rabbitmq-server-generic-unix-3.6.15版本,注意一定是generic-unix版本,里面有sbin目录。普通的rabbitmq-server版本里面缺少可执行文件。
下面是操作步骤,
cd /opt
aria2c http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.15/rabbitmq-server-generic-unix-3.6.15.tar.xz
xz -d rabbitmq-server-generic-unix-*.tar.xz # 这里是xz后缀,要使用xz命令解压,会产生一个*.tar的压缩包
tar -xvf rabbitmq-server-generic-unix*.tar
vim /etc/profile
export RABBITMQ_HOME=/opt/rabbitmq_server-3.6.15
export PATH=$PATH:$RABBITMQ_HOME/sbin
source /etc/profile
配置完成之后,可以直接使用下面一些命令行管理rabbitmq:
rabbitmq-server #命令来启动,—detached参数经测试已经被忽略。
rabbitmqctl status #查看当前broker的状态
rabbitmqctl cluster_status #查看集群状态
rabbitmqctl add_user root root123 # 默认访问rabbitmq的用户名、密码都是guest,但是只能在localhost访问,所以需要增加用户
rabbitmqctl set_permissions -p / root ".*" ".*" ".*" # 给root赋权限
rabbitmqctl set_user_tags root administrator # 给root用户赋角色
# 后续在代码中connectFactory设置用户及密码时,需要用到root及对应pwd
网友评论