RabbitMQ从入门到实战篇一:Hello RabbitMQ

我就是我 2022-05-21 10:26 339阅读 0赞

一、pom文件的依赖

  1. <dependency>
  2. <groupId>com.rabbitmq</groupId>
  3. <artifactId>amqp-client</artifactId>
  4. <version>4.1.0</version>
  5. </dependency>

二、创建一个生产者类:MessageSender

  1. import org.slf4j.Logger;
  2. import org.slf4j.LoggerFactory;
  3. import com.rabbitmq.client.Channel;
  4. import com.rabbitmq.client.Connection;
  5. import com.rabbitmq.client.ConnectionFactory;
  6. public class MessageSender {
  7. private Logger logger = LoggerFactory.getLogger(MessageSender.class);
  8. //第一个参数是对列名、第二个是发送的消息内容
  9. public boolean sendMessage(String queueName,String message){
  10. //new一个RabbitMQ的连接工厂
  11. ConnectionFactory factory = new ConnectionFactory();
  12. //设置需要连接的RabbitMQ地址,这里指向本机
  13. factory.setHost("127.0.0.1");
  14. Connection connection = null;
  15. Channel channel = null;
  16. try {
  17. //尝试获取一个连接
  18. connection = factory.newConnection();
  19. //尝试创建一个channel
  20. channel = connection.createChannel();
  21. //参数详解
  22. //第一个参数:队列的名字
  23. //第二个参数:如果是持久队列则为true(队列将在服务器重启时存活)
  24. //第三个参数:是否是排他性队列(别人看不到),只对当前连接有效,当前连接断开后,队列删除(设置了持久化也删除)
  25. //第四个参数:自动删除,在最后一个连接断开后删除队列
  26. //第五个参数:其他参数(后期用到再研究)
  27. channel.queueDeclare(queueName, false, false, false, null);
  28. //注意这里调用了getBytes(),发送的其实是byte数组,接收方收到消息后,需要重新组装成String
  29. channel.basicPublish("", queueName, null, message.getBytes());
  30. logger.info("生产者发送消息 '" + message + "'");
  31. //关闭channel和连接
  32. channel.close();
  33. connection.close();
  34. } catch (Exception e) {
  35. //失败后记录日志,返回false,代表发送失败
  36. logger.error("生产者发送消息失败",e);
  37. return false;
  38. }
  39. return true;
  40. }
  41. }

三、创建消费者类:MessageConsumer

  1. import java.io.IOException;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import com.rabbitmq.client.AMQP;
  5. import com.rabbitmq.client.Channel;
  6. import com.rabbitmq.client.Connection;
  7. import com.rabbitmq.client.ConnectionFactory;
  8. import com.rabbitmq.client.Consumer;
  9. import com.rabbitmq.client.DefaultConsumer;
  10. import com.rabbitmq.client.Envelope;
  11. public class MessageConsumer {
  12. private Logger logger = LoggerFactory.getLogger(MessageConsumer.class);
  13. //第一个参数:要消费的队列名字,第二个参数:消费者名字(自己定义用于区分)
  14. public boolean consume(String queueName,String consumerName){
  15. //连接RabbitMQ
  16. ConnectionFactory factory = new ConnectionFactory();
  17. factory.setHost("127.0.0.1");
  18. Connection connection = null;
  19. Channel channel = null;
  20. try {
  21. connection = factory.newConnection();
  22. channel = connection.createChannel();
  23. //这里声明queue是为了取消息的时候,queue肯定会存在
  24. //注意,queueDeclare是幂等的,也就是说,消费者和生产者,不论谁先声明,都只会有一个queue
  25. channel.queueDeclare(queueName, false, false, false, null);
  26. //这里重写了DefaultConsumer的handleDelivery方法,因为发送的时候对消息进行了getByte(),在这里要重新组装成String
  27. Consumer consumer = new DefaultConsumer(channel){
  28. @Override
  29. public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body)
  30. throws IOException {
  31. String message = new String(body, "UTF-8");
  32. logger.info("消费者接受到的消息为: '" + message + "'");
  33. }
  34. };
  35. //上面是声明消费者,这里用声明的消费者消费掉队列中的消息
  36. channel.basicConsume(queueName, true, consumer);
  37. //这里不能关闭连接,调用了消费方法后,消费者会一直连接着rabbitMQ等待消费
  38. } catch (Exception e) {
  39. //失败后记录日志,返回false,代表消费失败
  40. logger.error("消费消息失败",e);
  41. return false;
  42. }
  43. return true;
  44. }
  45. }

四、创建测试类

  1. public class TestRabbitMQ {
  2. public static void main( String[] args ){
  3. //创建生产者生产信息
  4. MessageSender sender = new MessageSender();
  5. sender.sendMessage("hello","hello RabbitMQ!");
  6. //创建消费者消费信息
  7. MessageConsumer consumer = new MessageConsumer();
  8. consumer.consume("hello","消费者一");
  9. }
  10. }

五、对测试类进行测试

1.生产消息

70

生产消息后,在管理平台进行查看,可看到一个名字为“hello”的队列,说明我们生产者创建队列成功

70 1

然后点击队列名字,查看消息内容

70 2

上述表明生产者发送消息成功,队列初始化建立成功

2.消费者消费信息

70 3

70 4

上图中的队列消息变为0,说明已被消耗掉

3.上述两个步骤就初步成功使用了RabbitMQ

4.RabbitMQ的管理界面还不了解,所以先不说

转载地址:点击送达

发表评论

表情:
评论列表 (有 0 条评论,339人围观)

还没有评论,来说两句吧...

相关阅读