互联网技术体验
来源:互联网 发布:重庆专业u盘数据恢复 编辑:程序博客网 时间:2024/05/22 06:49
RabbitMQ (https://www.rabbitmq.com/)
是款使用Erlang
语言构建的消息队列服务器(Message Queue Server
),该类服务也称为消息中间件是对AMQP
协议的应用实现,用于各应用程序之间的异步消息传递。
Installation
因为RabbitMQ
基于Erlang
开发,因此Erlang
环境需要提前部署到服务器,可参考官网页面:https://www.rabbitmq.com/download.html,因对软件版本没有特定要求,所以个人实践中直接使用发行版Repo
提供的Erlang
和RabbitMQ
。
apt-get install erlangwhich erlapt-get install rabbitmq-serverservice rabbitmq-server status
RabbitMQ
配置文件为/etc/rabbitmq/rabbitmq-env.conf
,可用来定义监听IP
和端口,一般无需修改。
Command Line Tools + Management Plugin
RabbitMQ
提供的命令管理工具可参考https://www.rabbitmq.com/cli.html,主要有以下三个命令:
rabbitmqctl for general administrative/operator tasksrabbitmq-plugins for plugin managementrabbitmqadmin for operator tasks over HTTP API
其中rabbitmqadmin
命令是对RabbitMQ
提供的管理插件基于HTTP
协议接口的封装以便于编程控制,实际中主要使用该插件提供的web
界面管理和监控MQ
服务。
1. rabbitmqctl
rabbitmqctl statusrabbitmqctl list_queuesrabbitmqctl list_usersrabbitmqctl add_user root 123rabbitmqctl change_password root 456 rabbitmqctl set_user_tags root administratorrabbitmqctl list_vhostsrabbitmqctl list_permissionsrabbitmqctl set_permissions -p / root ".*" ".*" ".*"
2. rabbitmq-plugins
rabbitmq-plugins enable rabbitmq_management rabbitmq-plugins list
3. rabbitmq_management HTTP GUI/API
参考https://www.rabbitmq.com/management.html
http://<IP>:15672/http://<IP>:15672/apihttp://<IP>:15672/cli
Note:
默认guest/guest
口令因安全问题只能通过本机127.0.0.1
接口访问,因此如果网络访问服务需要添加其他账户并设置VHOST
权限,一般添加admin
用户访问GUI
和使用库编程。
rabbitmqctl add_user admin adminrabbitmqctl set_user_tags admin administratorrabbitmqctl set_permissions -p / root ".*" ".*" ".*"
Client Library
RabbitMQ
提供了多种语言编写的API
库,并且官方提供了详细的程序实例参考https://www.rabbitmq.com/getstarted.html,如果选用Java
库通过网络访问RabbitMQ
服务需要在ConnectionFactory
对象中设置用户名密码覆盖默认的guest/guest
。
com.rabbitmq.client.ConnectionFactory factory = new com.rabbitmq.client.ConnectionFactory(); factory.setHost("192.168.19.131"); factory.setPort(5672); factory.setUsername("admin"); factory.setPassword("admin");
官方提供的简单实例:
export CLASSPATH=.:/home/ce/Desktop/jar/amqp-client-4.0.2.jar:/home/ce/Desktop/jar/slf4j-api-1.7.21.jar:/home/ce/Desktop/jar/slf4j-simple-1.7.22.jar#send.javaimport com.rabbitmq.client.ConnectionFactory;import com.rabbitmq.client.Connection;import com.rabbitmq.client.Channel;public class send { private final static String queue_name = "test"; public static void main(String[] argv) throws Exception { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("192.168.19.131"); factory.setPort(5672); factory.setUsername("root"); factory.setPassword("123"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); channel.queueDeclare(queue_name, false, false, false, null); String message = "Test Message @#$%^&"; channel.basicPublish("", queue_name, null, message.getBytes()); System.out.println("[x] sent '" + message + "'"); channel.close(); connection.close(); } }#recv.javaimport com.rabbitmq.client.*;import java.io.IOException;public class recv { private final static String queue_name = "test"; public static void main(String[] argv) throws Exception { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("192.168.19.131"); factory.setPort(5672); factory.setUsername("root"); factory.setPassword("123"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); channel.queueDeclare(queue_name, false, false, false, null); System.out.println("Message Receiving. if exit CTRL + C"); Consumer consumer = new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { String message = new String(body, "UTF-8"); System.out.println("[x] Received '" + message + "'"); } }; channel.basicConsume(queue_name, true, consumer); }}
执行结果如下:
root@bruce-virtual-machine:/home/ce/Desktop# java send[x] sent 'Test Message @#$%^&'root@bruce-virtual-machine:/home/ce/Desktop# java recvMessage Receiving. if exit CTRL + C[x] Received 'Test Message @#$%^&'.........
对于服务器上的消息状态可以通过rabbitmqctl list_queues
查看也可以通过网页上对应Queue_Name
页面里的Get Message(s)
查看。
- 互联网技术体验
- 互联网体验
- 互联网产品体验
- 互联网技术
- 互联网技术
- 互联网产品用户体验总结
- 2006互联网技术展望
- 互联网技术峰会资料
- 论下一代互联网技术。
- 互联网技术网站
- 什么是互联网技术
- 关注技术-互联网人物
- 互联网技术网站收藏
- 互联网存储技术浅谈
- 互联网编程技术
- 当前互联网技术趋势
- 互联网公司技术博客
- 互联网公司技术博客
- 在Ubuntu 16.04配置VNC Server (灰屏问题解决)
- Monitor项目开发走过的路~子线程Toast全解析
- JavaScript--函数声明、函数表达式、匿名函数、立即执行函数
- 到底怎么做需求分析,技术调研,技术设计?
- C++ 数据结构-树状数组
- 互联网技术体验
- Add to List 657. Judge Route Circle
- 虚幻4游戏菜单功能的实现
- ViewPager实现循环广告
- 关于热点的一些思考
- Java小游戏之小迷宫游戏
- 字符串的旋转--3步翻转法
- HDU
- 车牌识别一体机功能详细讲解第一部分