RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,在分布式系统开发中应用的非常广泛
RabbitMQ官方地址:RabbitMQ提供了5中工作模式:简单模式,work模式,Publish/Subscribe发布与订阅模式(也可称作广播模式),Routing路由模式,Topics主题模式;
简单模式实现:
1.导入依赖:
<dependencies> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.6.0</version> </dependency></dependencies>
2.创建生产者
public class Producer { public static void main(String[] args) throws IOException, TimeoutException { // 创建链接工厂对象 ConnectionFactory connectionFactory = new ConnectionFactory(); connectionFactory.setHost("localhost"); connectionFactory.setPort(5672); // 设置虚拟主机名字和登录,默认/ connectionFactory.setVirtualHost("/xxx"); connectionFactory.setUsername("root"); connectionFactory.setPassword("123456"); Connection connection = connectionFactory.newConnection(); // 创建消息通道 Channel channel = connection.createChannel(); // arg0:队列名称 arg1:是否持久化 arg2:是否排外 arg3:关闭连接时队列是否自动删除 arg4:队列其他参数 channel.queueDeclare("simple_queue", true, false, false, null); String message = "你好,世界。"; // 消息发送 // arg0:交换机名称,没有指定使用默认的Default Exchange // arg1:路由key,点对点模式可以使用队列名称 arg2:指定消息其他属性 arg3:消息的字节码 channel.basicPublish("", "simple_queue", null, message.getBytes()); channel.close(); connection.close(); }}
在执行完上述方法后,就可以在控制台查看创建的队列了
3.创建消费者
public class Consumer { public static void main(String[] args) throws IOException, TimeoutException { // 创建链接工厂对象 ConnectionFactory connectionFactory = new ConnectionFactory(); connectionFactory.setHost("localhost"); connectionFactory.setPort(5672); // 设置虚拟主机名字,默认/ connectionFactory.setVirtualHost("/xxx"); connectionFactory.setUsername("root"); connectionFactory.setPassword("123456"); // 创建一个新链接 Connection connection = connectionFactory.newConnection(); Channel channel = connection.createChannel(); channel.queueDeclare("simple_queue", true, false, false, null); // 创建消费者,并消费消息 DefaultConsumer consumer = new DefaultConsumer(channel){ /** * @param consumerTag 消费者标签,在channel.basicConsume时候可以指定 * @param envelope 消息包的内容,可从中获取消息id,消息routing key,交换机,消息和重发标志(收到消息失败后是否需要重新发送) * @param properties 消息属性信息 * @param body 消息体 **/ @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { String routingKey = envelope.getRoutingKey(); String exchange = envelope.getExchange(); long deliveryTag = envelope.getDeliveryTag(); String message = new String(body, "UTF-8"); System.out.println("路由:" + routingKey + ",交换机:" + exchange + ",消息id:" + deliveryTag + ",消息体:" + message); } }; // 消息监听 arg0:监听的队列名称 // arg1:是否自动应答,设置为true为表示消息接收到自动向mq回复接收到了,mq接收到回复会删除消息,设置为false则需要手动确认 // arg2:消费者接收消息到后回调(消费消息) channel.basicConsume("simple_queue", true, consumer); // 关闭资源(不建议关闭,建议一直监听消息) }}
到此一个简单模式的RabbitMQ就搭建好啦,其他模式的后面再更。
原文转载:http://www.shaoqun.com/a/510022.html
敦煌网站:https://www.ikjzd.com/w/189
tenso:https://www.ikjzd.com/w/1552.html
RabbitMQ是由erlang语言开发,基于AMQP(AdvancedMessageQueue高级消息队列协议)协议实现的消息队列,在分布式系统开发中应用的非常广泛RabbitMQ官方地址:RabbitMQ提供了5中工作模式:简单模式,work模式,Publish/Subscribe发布与订阅模式(也可称作广播模式),Routing路由模式,Topics主题模式;简单模式实现:1.导入依赖:&l
李群:李群
张洁:张洁
成都周边购物特产:苦丁茶 - :成都周边购物特产:苦丁茶 -
獐子岛民俗娱乐:獐子岛镇秧歌大赛 :獐子岛民俗娱乐:獐子岛镇秧歌大赛
口述:色狼上司对我女友动手动脚:口述:色狼上司对我女友动手动脚
No comments:
Post a Comment