当前位置:   article > 正文

RabbitMQ(简单模式)

RabbitMQ(简单模式)

2种远程服务调用

1openFeign:

优点:能拿到被调用的微服务返回的数据,系统系耦度高,系统稳定。

缺点:同步调用,如果有很多服务需要被调用,耗时长。

MQ,消息队列,RabbitMQ是消息web中间件的其中一种产品。

2RabbitMQ:

使用AMQP(高级队列协议,协议是一种规范)。

优点:

1 异步调用,可以处理很多请求。(一万个)

2时效性(快),微秒级,是毫秒级的1000倍。

3 削(xue 一声)峰填谷。

4单机吞吐量高(每秒处理消息的个数)。

5消息可靠性好。

6里面有vhost虚拟主机,不用在安装各种环境(开发环境,测试环境,线上环境)

缺点:

1不能拿到被调用的微服务返回的数据

2引入外部依赖,实现应用解耦,系统可用性降低,系统越不稳定

图解:便于理解

简单模式实例:

1linux里

我用的redis,RabbitMQ,现在redis里安装RabbitMQ

1打开虚拟机,在docker里添加RabbitMQ,命令如下:

docker run -d --name=rabbit01 -e RABBITMQ_DEFAULT_USER=guest -e RABBITMQ_DEFAULT_PASS=guest -p 5672:5672 -p 15672:15672 -p 25672:25672 --hostname rabbit01 --restart=always -v /data/rabbit/data:/var/lib/rabbitmq -v /data/rabbit/conf:/etc/rabbitmmq rabbitmq:3.11-management

2安装完成之后,打开网页版查看RabbitMQ,端口号15672

我输入的网址:192.168.74.75:15672

成功页面

2idea里

1创建一个maven项目就可以,选择快速创建。

2创建父工程,生产者,消费者

3在父工程里添加依赖Rabbit

如果传JSON数据,就加fastjson依赖

  1. <!--rabbitmq依赖-->
  2. <dependency>
  3. <groupId>com.rabbitmq</groupId>
  4. <artifactId>amqp-client</artifactId>
  5. <version>5.14.2</version>
  6. </dependency>
  7. <!--对象和json数据的转换-->
  8. <dependency>
  9. <groupId>com.alibaba</groupId>
  10. <artifactId>fastjson</artifactId>
  11. <version>1.2.83</version>
  12. </dependency>

4编写生产者代码

  1. package org.example;
  2. import com.alibaba.fastjson.JSON;
  3. import com.rabbitmq.client.Channel;
  4. import com.rabbitmq.client.Connection;
  5. import com.rabbitmq.client.ConnectionFactory;
  6. import java.io.IOException;
  7. import java.util.HashMap;
  8. import java.util.concurrent.TimeoutException;
  9. /**
  10. * Hello world!
  11. *
  12. */
  13. public class App {
  14. public static void main( String[] args ) {
  15. // 创建连接工厂
  16. ConnectionFactory factory = new ConnectionFactory();
  17. // 设置 RabbitMQ 服务器的地址,我用的redis,RabbitMQ,现在redis里安装RabbitMQ
  18. factory.setHost("192.168.74.75");
  19. Connection connection = null;
  20. Channel channel = null;
  21. try {
  22. connection = factory.newConnection();
  23. // 创建一个通道
  24. channel = connection.createChannel();
  25. // 创建消息内容
  26. HashMap<String, Object> map = new HashMap<>();
  27. map.put("name", "张三");
  28. map.put("age", "22");
  29. channel.basicPublish("", "qy172-RabbitMQ", null, JSON.toJSONBytes(map));
  30. System.out.println("发送成功");
  31. } catch (IOException e) {
  32. // 发生 IO 异常时抛出运行时异常
  33. throw new RuntimeException(e);
  34. } catch (TimeoutException e) {
  35. // 发生超时异常时抛出运行时异常
  36. throw new RuntimeException(e);
  37. } finally {
  38. if (channel != null) {
  39. try {
  40. // 关闭通道
  41. channel.close();
  42. } catch (IOException | TimeoutException e) {
  43. // 发生 IO 或超时异常时抛出运行时异常
  44. throw new RuntimeException(e);
  45. }
  46. }
  47. if (connection != null) {
  48. try {
  49. // 关闭连接
  50. connection.close();
  51. } catch (IOException e) {
  52. // 发生 IO 异常时抛出运行时异常
  53. throw new RuntimeException(e);
  54. }
  55. }
  56. }
  57. }
  58. }

4编写消费者代码

  1. package org.example;
  2. import com.alibaba.fastjson.JSON;
  3. import com.rabbitmq.client.*;
  4. import java.io.IOException;
  5. import java.util.Map;
  6. public class App {
  7. public static void main(String[] args) throws Exception {
  8. // 创建连接工厂对象
  9. ConnectionFactory factory = new ConnectionFactory();
  10. // 设置 RabbitMQ 服务器的主机地址为 "192.168.74.75"
  11. factory.setHost("192.168.74.75");
  12. Connection connection = factory.newConnection();
  13. // 创建一个 RabbitMQ 连接
  14. Channel channel = connection.createChannel();
  15. // 创建一个通道,用于与 RabbitMQ 之间的通信
  16. Consumer consumer = new DefaultConsumer(channel) {
  17. // 创建一个消费者对象,并重写其方法
  18. @Override
  19. public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
  20. // 消费消息的处理方法
  21. String json = new String(body);
  22. // 将消息内容转换为字符串
  23. Map map = JSON.parseObject(json, Map.class);
  24. // 使用 JSON 解析成 Map 对象
  25. System.out.println("消息内容"+map);
  26. // 输出消息内容
  27. }
  28. };
  29. channel.basicConsume("qy172-RabbitMQ",true,consumer);
  30. }
  31. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/347054
推荐阅读
相关标签
  

闽ICP备14008679号