脚本宝典收集整理的这篇文章主要介绍了RabbitMQ的web页面介绍(三),脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
AMQP 0-9-1 operation | | configure | write | read |
---|---|---|---|---|
exchange.declare | (passive=false) | exchange | ||
exchange.declare | (passive=true) | |||
exchange.declare | (with [AE](ae.html)) | exchange | exchange (AE) | exchange |
exchange.delete | exchange | |||
queue.declare | (passive=false) | queue | ||
queue.declare | (passive=true) | |||
queue.declare | (with [DLX](dlx.html)) | queue | exchange (DLX) | queue |
queue.delete | queue | |||
exchange.bind | exchange (destination) | exchange (source) | ||
exchange.unbind | exchange (destination) | exchange (source) | ||
queue.bind | queue | exchange | ||
queue.unbind | queue | exchange | ||
basic.publish | exchange | |||
basic.get | queue | |||
basic.consume | queue | |||
queue.purge | queue |
3.在 Admin -> Users 页面添加一个名为 order-user 的用户,并设置为 management 角色。
字段名
|
值
|
说明
|
Virtual Host
|
/v1
|
指定用户的vhost,以下权限都只限于 /v1 vhost中
|
Configure regexp
|
eq-.*
|
只能操作名称以eq-开头的exchange或queue;为空则不能操作任何exchange和queue
|
Write regexp
|
.*
|
能够发送消息到任意名称的exchange,并且能绑定到任意名称的队列和任意名称的目标交
换器(指交换器绑定到交换器),为空表示没有权限
|
Read regexp
|
^test$
|
只能消费名为test队列上的消息,并且只能绑定到名为test的交换器
|
public class PRoducer { public static void main(String[] args) { // 1、创建连接工厂 ConnectionFactory factory = new ConnectionFactory(); // 2、设置连接属性 factory.setUsername("order-user"); factory.setPassword("order-user"); factory.setVirtualHost("v1"); Connection connection = null; Channel channel = null; // 3、设置每个节点的链接地址和端口 Address[] addresses = new Address[]{ new Address("192.168.0.1", 5672), new Address("192.168.0.2", 5672) }; try { // 开启/关闭连接自动恢复,默认是开启状态 factory.setAutomaticRecoveryEnabled(true); // 设置每100毫秒尝试恢复一次,默认是5秒:com.rabbitmq.client.ConnectionFactory.DEFAULT_NETWORK_RECOVERY_INTERVAL factory.setNetworkRecoveryInterval(100); factory.setTopoLOGyRecoveryEnabled(false); // 4、使用连接集合里面的地址获取连接 connection = factory.newConnection(addresses, "生产者"); // 添加重连监听器 ((Recoverable) connection).addRecoveryListener(new RecoveryListener() { /** * 重连成功后的回调 * @param recoverable */ public void handleRecovery(Recoverable recoverable) { System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS").format(new Date()) + " 已重新建立连接!"); } /** * 开始重连时的回调 * @param recoverable */ public void handleRecoveryStarted(Recoverable recoverable) { System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS").format(new Date()) + " 开始尝试重连!"); } }); // 5、从链接中创建通道 channel = connection.createChannel(); /** * 6、声明(创建)队列 * 如果队列不存在,才会创建 * RabbitMQ 不允许声明两个队列名相同,属性不同的队列,否则会报错 * * queueDeclare参数说明: * @param queue 队列名称 * @param durable 队列是否持久化 * @param exclusive 是否排他,即是否为私有的,如果为true,会对当前队列加锁,其它通道不能访问,并且在连接关闭时会自动删除,不受持久化和自动删除的属性控制 * @param autoDelete 是否自动删除,当最后一个消费者断开连接之后是否自动删除 * @param arguments 队列参数,设置队列的有效期、消息最大长度、队列中所有消息的生命周期等等 */ channel.exchangeDeclare("test-exchange", "fanout"); channel.queueDeclare("queue1", false, false, false, null); channel.queueBind("queue1", "test-exchange", "xxoo"); for (int i = 0; i < 100; i++) { // 消息内容 String message = "Hello World " + i; try { // 7、发送消息 channel.basicPublish("test-exchange", "queue1", null, message.getBytes()); } catch (AlreadyClosedException e) { // 可能连接已关闭,等待重连 System.out.println("消息 " + message + " 发送失败!"); i--; TimeUnit.SECONDS.sleep(2); continue; } System.out.println("消息 " + i + " 已发送!"); TimeUnit.SECONDS.sleep(2); } } catch (IOException e) { e.printStackTrace(); } catch (TimeoutException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } finally { // 8、关闭通道 if (channel != null && channel.isOpen()) { try { channel.close(); } catch (IOException e) { e.printStackTrace(); } catch (TimeoutException e) { e.printStackTrace(); } } // 9、关闭连接 if (connection != null && connection.isOpen()) { try { connection.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
public class VirtualHosts { public static void main(String[] args) { // 1、创建连接工厂 ConnectionFactory factory = new ConnectionFactory(); // 2、设置连接属性 factory.setUsername("order-user"); factory.setPassword("order-user"); factory.setVirtualHost("v1"); Connection connection = null; Channel prducerChannel = null; Channel consumerChannel = null; // 3、设置每个节点的链接地址和端口 Address[] addresses = new Address[]{ new Address("192.168.0.1", 5672), new Address("192.168.0.2", 5672) }; try { // 4、从连接工厂获取连接 connection = factory.newConnection(addresses, "消费者"); // 5、从链接中创建通道 prducerChannel = connection.createChannel(); prducerChannel.exchangeDeclare("test-exchange", "fanout"); prducerChannel.queueDeclare("queue1", false, false, true, null); prducerChannel.queueBind("queue1", "test-exchange", "xxoo"); // 消息内容 String message = "Hello A"; prducerChannel.basicPublish("test-exchange", "c1", null, message.getBytes()); consumerChannel = connection.createChannel(); // 创建一个消费者对象 Consumer consumer = new DefaultConsumer(consumerChannel) { @override public void handleDelivery(String consumerTag, envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { System.out.println("收到消息:" + new String(body, "UTF-8")); } }; consumerChannel.basicConsume("queue1", true, consumer); System.out.println("等待接收消息"); System.in.read(); } catch (IOException e) { e.printStackTrace(); } catch (TimeoutException e) { e.printStackTrace(); } finally { // 9、关闭通道 if (prducerChannel != null && prducerChannel.isOpen()) { try { prducerChannel.close(); } catch (IOException e) { e.printStackTrace(); } catch (TimeoutException e) { e.printStackTrace(); } } // 10、关闭连接 if (connection != null && connection.isOpen()) { try { connection.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
@H_126_1125@
ConnectionFactory factory = new ConnectionFactory(); // configure VARious connection settings try { Connection conn = factory.newConnection(); } catch (java.net.ConnectException e) { Thread.sleep(5000); // apply retry logic }
((Recoverable) connection).addRecoveryListener() ((Recoverable) connection).removeRecoveryListener()
git源码:https://gitee.com/TongHuaShuShuoWoDeJieJu/rabbit.git
以上是脚本宝典为你收集整理的RabbitMQ的web页面介绍(三)全部内容,希望文章能够帮你解决RabbitMQ的web页面介绍(三)所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。