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

RabbitMQ的接触

1.首先我从官方下载了rabbitmq-serverhttp:www.rabbitmq.comdownload.html当然公司还是以java开发为主,因此下载的版本是基于linu

1.首先我从官方下载了rabbitmq-server

http://www.rabbitmq.com/download.html

当然公司还是以java开发为主,因此下载的版本是基于linux下面的,不过我再这里下载一个ubuntu版本的,因为我开发的机子就是ubuntu.

下载好后,安装很快,ubuntu下直接dpkg -i rabbitmq-server_3.5.0-1_all.deb

当然其他linux系统可以下载tar.gz包解压,但是还需要安装erlang.解压后可以执行以下命令就可以启动rabbitmq了

解压的目录sbin下找到rabbitmq-server运行即可,当然这里不需要详细说安装了,可以参考官方文档进行安装.

http://www.rabbitmq.com/install-generic-unix.html

当然,为了我们能可视化查看rabbitmq-server的运行情况和满足其他开发需求我们可以启用插件

rabbitmq-plugins enables,这样我们可以打开http://127.0.0.1:15672/

使用guest,guest登陆后可以看到http管理界面.

2.理解rabbitmq的工作原理

第一步安装好服务后,接下来我们就要进行生产消息和消费消息了.

但是要开发必须要理解rabbitmq的工作原理.当然如果我长篇大论记下来估计要记录几十页,因此如果英语比较好的可以先看看官方文档.

http://www.rabbitmq.com/getstarted.html

当然如果英语实在是渣的话,不妨参考下面的链接:

http://rabbitmq-into-chinese.readthedocs.org/zh_CN/latest/

看完这些文档之后,估计会对rabbitmq理解的差不多了.

当然网上也有很多人写的博客,都可以参照的.


3.java客户端开发

当然按照上述文档我们可以开发出自己需要的客户端,但是这里我主要介绍如何使用spring-amqp来进行开发.

首先我们需要引入spring-amqp包,为了能查看调试信息,我们也引入log4j


    org.springframework.amqp
    spring-rabbit
    ${spring-rabbit.version}


    log4j
    log4j
    1.2.17

引入后就要进行开发了,当然spring-amqp如何配置这里不想长篇大论,因此这里只介绍两种发送方式

异步发送消息

其实这种方式是很容易的,大多数网上文章都是基于配置文件的,但是如果我们使用代码来创建,那么更加会理解spring-amqp的设计原理的,能使用代码创建也就更加能使用配置文件了

CachingConnectionFactory factory=new CachingConnectionFactory();
//创建链接工厂,使用带缓存功能的工厂可以基于Channel创建多个Channel来处理

//设置rabbitmq-server链接地址
factory.setAddresses("localhost:5672");

//设置登陆用户名,可以在rabbit-server http页面创建用户
factory.setUsername("guest");

//设置登陆密码(在本机上可以不用设置)
factory.setPassword("guest");

//启动channel的个数并缓存
factory.setChannelCacheSize(channelSize);

//创建admin进行队列绑定,exchange绑定
RabbitAdmin admin=new RabbitAdmin(factory);

//创建名字为qingting-queue的队列,durable是否是持久化消息到服务端
Queue queue=new Queue("qingting-queue",durable);

//此时会在rabbitmq-servers上创建一个queue
admin.declareQueue(queue);

//创建exchange并进行订阅到服务端,这里创建的是topic类型的exchange,也就是路由key可以是正则表达式
Exchange exchange=new TopicExchange("qingting-exchange",durable,autoDelete);

//rabbitmq-server上会创建一个名称交exchangeName的exchange,同时类型为topic,而且特征有D表示durable
admin.declareExchange(exchange);

/**
* 使用routeKey将队列绑定到exchange上面,这个时候,rabbitmq-server上的queue和exchange会有一个通过routeKey的映射关系
*/
admin.declareBinding(BindingBuilder.bind(queue).to(exchange).with("qingting.*").noargs());

//创建一个Template来进行发消息,也可以收消息等操作
template = new RabbitTemplate(factory);

//这里讨论发消息,我们通过exchange来进行发消息,同时设置routeKey,这时候因为是topic类型的exchange,通过
比对设置的routeKey跟上面绑定的bindRouteKey做正则匹配,如果匹配上了就会把消息推送到queueName的这个队列
template.setExchange("qingting-exchange");
template.setRoutingKey("qingting.route.key");

//设置将消息转换为json类型,当然自己可以设置其他的转换器或者自己实现
template.setMessageConverter(new Jackson2JsonMessageConverter());

有了上面配置后,那么我们可以进行发送同步消息了

template.convertAndSend();

因为上述设置了消息转换器,因此最好使用改方法,当然还有template.send()方法其实使用该方法确实结果Jackson2JsonMessageConverter将消息内容体处理成json并转换为字节数组,

同时还会将消息的属性配置中conentType设置为application/json 并且head中设置一些消息内容的对象类型等信息,之所以这样做是因为,消费者接收消息,也可以设置json转换器直接将拿接收的消息属性中head的值将消息体内容进行转换成对象,可以在rabbitmq管理页面看到发送的消息会附带如下信息

Exchange:        qingting-exchange  //上述template设置的exchange
Routing Key:    qingting.route.key       //template设置的routeKey
Properties
    headers:
        __KeyTypeId__:java.lang.Object     //转json附带的信息,方便转换
        __TypeId__:java.util.HashMap
        __ContentTypeId__:java.lang.Object
    content_encoding:UTF-8
    content_type:application/json       
Payload
    {"username":"81a40c08-5a01-46fa-93c3-981fcccb3c8c","index":0}

    因此可以看到http页面上在绑定的队列会有一条消息到绑定的队列,因为这时候没有消费者订阅队列,我们设置的是持久化durable,因此会一一直留在server中


RabbitMQ的接触


推荐阅读
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • 使用WinForms 实现 RabbitMQ RPC 示例
    本文通过两个WinForms应用程序演示了如何使用RabbitMQ实现远程过程调用(RPC)。一个应用作为客户端发送请求,另一个应用作为服务端处理请求并返回响应。 ... [详细]
  • 本文详细介绍了如何解决 Microsoft SQL Server 中用户 'sa' 登录失败的问题。错误代码为 18470,提示该帐户已被禁用。我们将通过 Windows 身份验证方式登录,并启用 'sa' 帐户以恢复其访问权限。 ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • Java中的基本数据类型与包装类解析
    本文探讨了Java编程语言中的8种基本数据类型及其对应的包装类。通过分析这些数据类型的特性和使用场景,以及自动拆装箱机制的实现原理,帮助开发者更好地理解和应用这些概念。 ... [详细]
  • 本文详细探讨了Java中的包管理机制,包括默认包的使用和自定义包名的创建方法。通过实际操作,帮助开发者更好地理解和应用包管理。 ... [详细]
  • 本文深入探讨了 Exchange Server 2010 中客户端访问的代理和重定向机制,特别是在跨站点环境中如何配置这些功能以确保用户能够顺利访问邮箱服务。通过详细解析不同场景下的应用,帮助管理员更好地理解和实施相关设置。 ... [详细]
  • 本文介绍了如何使用JFreeChart库创建一个美观且功能丰富的环形图。通过设置主题、字体和颜色等属性,可以生成符合特定需求的图表。 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 本文探讨了过度依赖咖啡对生物钟的影响,以及如何合理划分学习和娱乐时间。通过反思,我们认识到即使是快乐的事情也需要适度,培养兴趣爱好应注重沉浸感和心流体验。文章还提供了一些具体的调整建议。 ... [详细]
  • 一个登陆界面
    预览截图html部分123456789101112用户登入1314邮箱名称邮箱为空15密码密码为空16登 ... [详细]
  • 本文详细解释了涨停板交易(俗称“打板”)的定义、操作步骤及注意事项。涨停板交易是一种高风险高回报的投资策略,尤其在牛市中表现出色。文中不仅介绍了如何选择和买入涨停股票,还提供了三大纪律以规避风险。 ... [详细]
  • Shell脚本中变量操作详解
    本文基于《鸟哥的Linux私房菜》一书,详细介绍了Shell脚本中变量的使用方法,包括变量的赋值规则、字符串处理技巧以及环境变量的管理等,旨在帮助读者更好地理解和使用Shell中的变量。 ... [详细]
  • iOS 开发技巧:TabBarController 自定义与本地通知设置
    本文介绍了如何在 iOS 中自定义 TabBarController 的背景颜色和选中项的颜色,以及如何使用本地通知设置应用程序图标上的提醒个数。通过这些技巧,可以提升应用的用户体验。 ... [详细]
  • 本文旨在回顾并总结近期学习的.NET Core基础知识,通过具体的操作指南加深理解,并为初学者提供实用建议,避免常见的错误和陷阱。内容涵盖CentOS的安装配置、.NET Core环境搭建及网站部署等。 ... [详细]
author-avatar
蒲哟独CrRz
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有