热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RabbitMQ初体验

这里官方使用的Pom是4.0.2版本简单队列hellowordP:消息的生产者C:消息的消费者红色:队列生产者将消息发送到队列,消费者从队列中获取消息。那么我们根据以上的模型,咱们

这里官方使用的Pom是4.0.2版本

 1 
 2   
 3     com.rabbitmq
 4     amqp-client
 5     4.0.2
 6   
 7    
 8     org.slf4j
 9     slf4j-api
10     1.7.10
11   
12   
13     org.slf4j
14     slf4j-log4j12
15     1.7.5
16   
17   
18     log4j
19     log4j
20     1.2.17
21   
22   
23     junit
24     junit
25     4.11
26   
27 

简单队列 hello word

P:消息的生产者

C:消息的消费者

红色:队列

生产者将消息发送到队列,消费者从队列中获取消息。

那么我们根据以上的模型,咱们抽取出 3 个对象 生产者(用户发送消息) 队列(中间件):类似于容器(存储消息) 消费者(获取队列中的消息)

JAVA 操作 获取 MQ 连接

类似于我们在操作数据库的时候的要获取到连接然后才对数据进行

 1 package cn.wh.util;
 2 
 3 import com.rabbitmq.client.Connection;
 4 import com.rabbitmq.client.ConnectionFactory;
 5 
 6 import java.io.IOException;
 7 import java.util.concurrent.TimeoutException;
 8 
 9 public class RabbitMqConnectionUtil {
10     /**
11      * 获取mq的连接
12      * @return
13      */
14     public static Connection getConnection() throws IOException, TimeoutException {
15         //定义一个连接工厂
16         ConnectionFactory factory=new ConnectionFactory();
17         //设置服务器的地址
18         factory.setHost("192.168.152.5");
19         //AMQP 5672
20         factory.setPort(5672);
21         //设置哪一个数据库 vhost
22         factory.setVirtualHost("/vhost_wh");
23         //设置用户名
24         factory.setUsername("wh");
25         factory.setPassword("123");
26 
27         return  factory.newConnection();
28     }
29 }

生产者发送数据到消息队列

 1 package cn.wh.simple;
 2 
 3 import cn.wh.util.RabbitMqConnectionUtil;
 4 import com.rabbitmq.client.Channel;
 5 import com.rabbitmq.client.Connection;
 6 
 7 import java.io.IOException;
 8 import java.util.concurrent.TimeoutException;
 9 
10 public class Send {
11     private static final String QUEVE_NAME = "test_simple_queue";
12 
13     public static void main(String[] args) throws IOException {
14         //获取一个连接
15         Connection cOnnection= null;
16         try {
17          
18             cOnnection= RabbitMqConnectionUtil.getConnection();
19         } catch (IOException e) {
20             e.printStackTrace();
21         } catch (TimeoutException e) {
22             e.printStackTrace();
23         }
24 
25         //创建一个通道
26         Channel channel = connection.createChannel();
27         // 创建队列声明
28         channel.queueDeclare(QUEVE_NAME, false, false, false, null);
29 
30         //发送的消息
31         String msg="hello simple";
32         channel.basicPublish("",QUEVE_NAME,null,msg.getBytes());
33         System.out.println("发送成功===============");
34         try {
35             channel.close();
36             connection.close();
37         } catch (TimeoutException e) {
38             e.printStackTrace();
39         }
40     }
41 }

查看消消费者消费消费者消费消费者消费消费者消消费者消费消费者消费

 1 package cn.wh.simple;
 2 
 3 import cn.wh.util.RabbitMqConnectionUtil;
 4 import com.rabbitmq.client.Channel;
 5 import com.rabbitmq.client.Connection;
 6 import com.rabbitmq.client.QueueingConsumer;
 7 
 8 import java.io.IOException;
 9 import java.util.concurrent.TimeoutException;
10 
11 public class Accept {
12     private static final java.lang.String QUEVE_NAME = "test_simple_queue";
13     public static void main(String[] args) throws IOException, InterruptedException {
14 
15         //获取一个连接
16         Connection cOnnection=null;
17         {
18             try {
19                 cOnnection= RabbitMqConnectionUtil.getConnection();
20             } catch (IOException e) {
21                 e.printStackTrace();
22             } catch (TimeoutException e) {
23                 e.printStackTrace();
24             }
25             //定义管道
26             Channel channel = connection.createChannel();
27             //定义队列的消费者
28             QueueingConsumer queueingCOnsumer= new QueueingConsumer(channel);
29             channel.basicConsume(QUEVE_NAME,true,queueingConsumer);
30             while (true){
31                 QueueingConsumer.Delivery delivery = queueingConsumer.nextDelivery();
32                 String msg = new String(delivery.getBody());
33 
34 
35                 System.out.println("msg"+ msg);
36             }
37         }
38     }
39 }

简单队列的不足

耦合性高 生产消费一一对应(如果有多个消费者想都消费这个消息,就不行了) 队列名称变更时需要同时更改

 


推荐阅读
  • Java 8 引入了 Stream API,这一新特性极大地增强了集合数据的处理能力。通过 Stream API,开发者可以更加高效、简洁地进行集合数据的遍历、过滤和转换操作。本文将详细解析 Stream API 的核心概念和常见用法,帮助读者更好地理解和应用这一强大的工具。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 在处理高并发场景时,确保业务逻辑的正确性是关键。本文深入探讨了Java原生锁机制的多种细粒度实现方法,旨在通过使用数据的时间戳、ID等关键字段进行锁定,以最小化对系统性能的影响。文章详细分析了不同锁策略的优缺点,并提供了实际应用中的最佳实践,帮助开发者在高并发环境下高效地实现锁机制。 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 在Spring框架中,基于Schema的异常通知与环绕通知的实现方法具有重要的实践价值。首先,对于异常通知,需要创建一个实现ThrowsAdvice接口的通知类。尽管ThrowsAdvice接口本身不包含任何方法,但开发者需自定义方法来处理异常情况。此外,环绕通知则通过实现MethodInterceptor接口来实现,允许在方法调用前后执行特定逻辑,从而增强功能或进行必要的控制。这两种通知机制的结合使用,能够有效提升应用程序的健壮性和灵活性。 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • 使用cpphttplib构建HTTP服务器以处理带有查询参数的URL请求 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • 在Spring Boot项目中,通过YAML配置文件为静态变量设置值的方法与实践涉及以下几个步骤:首先,创建一个新的配置类。需要注意的是,自动生成的setter方法默认是非静态的,因此需要手动将其修改为静态方法,以确保静态变量能够正确初始化。此外,建议使用`@Value`注解或`@ConfigurationProperties`注解来注入配置属性,以提高代码的可读性和维护性。 ... [详细]
  • 本文深入探讨了 MXOTDLL.dll 在 C# 环境中的应用与优化策略。针对近期公司从某生物技术供应商采购的指纹识别设备,该设备提供的 DLL 文件是用 C 语言编写的。为了更好地集成到现有的 C# 系统中,我们对原生的 C 语言 DLL 进行了封装,并利用 C# 的互操作性功能实现了高效调用。此外,文章还详细分析了在实际应用中可能遇到的性能瓶颈,并提出了一系列优化措施,以确保系统的稳定性和高效运行。 ... [详细]
  • 智能制造数据综合分析与应用解决方案
    在智能制造领域,生产数据通过先进的采集设备收集,并利用时序数据库或关系型数据库进行高效存储。这些数据经过处理后,通过可视化数据大屏呈现,为生产车间、生产控制中心以及管理层提供实时、精准的信息支持,助力不同应用场景下的决策优化和效率提升。 ... [详细]
  • 本文深入探讨了在Android应用开发中常见的相机连接故障问题,特别是在RK3288平台和Android 6.0系统上。通过分析具体案例,本文提供了详细的解决方案和应对策略,旨在帮助开发者有效解决相机连接问题,提升应用的稳定性和用户体验。 ... [详细]
  • Spring框架入门指南:专为新手打造的详细学习笔记
    Spring框架是Java Web开发中广泛应用的轻量级应用框架,以其卓越的功能和出色的性能赢得了广大开发者的青睐。本文为初学者提供了详尽的学习指南,涵盖基础概念、核心组件及实际应用案例,帮助新手快速掌握Spring框架的核心技术与实践技巧。 ... [详细]
  • MySQL性能优化与调参指南【数据库管理】
    本文详细探讨了MySQL数据库的性能优化与参数调整技巧,旨在帮助数据库管理员和开发人员提升系统的运行效率。内容涵盖索引优化、查询优化、配置参数调整等方面,结合实际案例进行深入分析,提供实用的操作建议。此外,还介绍了常见的性能监控工具和方法,助力读者全面掌握MySQL性能优化的核心技能。 ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
author-avatar
手机用户2502883515
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有