Java引用RabbitMQ快速入门
这里写目录
- Java发送消息给MQ
- 消费者接收消息
- 实现一个队列绑定多个消费者
- 消息推送限制
- Fanout交换机
- 路由的作用
- Direct交换机
- 使用案例
Java发送消息给MQ
public void testSendMessage() throws IOException, TimeoutException {// 1.建立连接ConnectionFactory factory = new ConnectionFactory();// 1.1.设置连接参数,分别是:主机名、端口号、vhost、用户名、密码factory.setHost("117.72.210.37");factory.setPort(5672);factory.setVirtualHost("bthost");factory.setUsername("admin");factory.setPassword("hURA6SxC6YrBFoqt");// 1.2.建立连接Connection connection = factory.newConnection();// 2.创建通道ChannelChannel channel = connection.createChannel();// 3.创建队列String queueName = "simple.queue";channel.queueDeclare(queueName, false, false, false, null);// 4.发送消息String message = "hello, rabbitmq!";channel.basicPublish("", queueName, null, message.getBytes());System.out.println("发送消息成功:【" + message + "】");// 5.关闭通道和连接channel.close();connection.close();}
消费者接收消息
@RabbitListener(queues = "simple.queue")//指定要监听哪个队列public void listenSimpleQueueMessage(String msg){System.out.println("spring 消费者接收到消息 :【" + msg + "】");throw new RuntimeException("故意的");//MQ会一直投递消息
// throw new MessageConversionException("故意的");//失败后返回reject不再投递}
实现一个队列绑定多个消费者
消息推送限制
如果没有设置限制话不管你上一条消息是否处理完,消费者会一直接收,设置厚只有处理完消息才会接受下一条。
Fanout交换机
将消息发送给交换机
@Testpublic void testFanoutExchange() throws InterruptedException {//交换机名称String exchangeName = "itcast.fanout";String message = "hello, everyone";//这次是将消息发送到交换机,不再是队列rabbitTemplate.convertAndSend(exchangeName, "",message);}
接收消息
@RabbitListener(queues = "fanout.queue1")public void listenFanoutQueue1(String msg) {System.out.println("消费者1接收到Fanout消息:【" + msg + "】");}@RabbitListener(queues = "fanout.queue2")public void listenFanoutQueue2(String msg) {System.out.println("消费者2接收到Fanout消息:【" + msg + "】");}
路由的作用
Direct交换机
使用案例
交换机绑定
@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "direct.queue1"),exchange = @Exchange(name="itcast.direct",type = ExchangeTypes.DIRECT),key = {"red","blue"}))public void listenDirectQueue1(String msg){System.out.println("消费者1接收到Direct消息:【" + msg + "】");}@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "direct.queue2"),exchange = @Exchange(name="itcast.direct",type = ExchangeTypes.DIRECT),key = {"red","yellow"}))
** @Testpublic void testDirectExchange() {//交换机名称String exchangeName = "itcast.direct";String message = "hello, blue";//这次是将消息发送到交换机,不再是队列rabbitTemplate.convertAndSend(exchangeName, "red", message);}**
key是谁对应消费者就会接收到对应key的消息