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

ActiveMQ学习系列(二)生产者客户端(java)

上文主要简单地将activeMq搭建了起来,并且可以用webconsole去登录查看相关的后台功能。本文将学习如何用java语言实现一个生产者客户端,主

上文主要简单地将activeMq搭建了起来,并且可以用web console去登录查看相关的后台功能。

本文将学习如何用java语言实现一个生产者客户端,主要参考了以下链接:

http://activemq.apache.org/jndi-support.html

代码已上传github,建议先下载下来实际运行一遍:

https://github.com/cctvckl/big-data-learning/tree/master/activemq-learning

 

一、ActiveMq支持的协议

ActiveMq作为消息中间件,支持多种连接协议,如:tcp、amqp、stomp、mqtt等。

如果启动时以./activemq console方式启动,可以看到如下输出:

而下文将要讲解的java客户端程序,就是基于其中的tcp协议。

将tcp://host:port这个地址记录下来,下面需要用到。

二、大体思路

1、本地配置文件,配置要连接的ActiveMq服务器、包括连接协议和端口号,配置要发送消息的目标队列、目标topic等等。

2、程序读取上述配置文件,生成连接会话、生成消息生产者、发送消息、关闭连接。
三、具体步骤

1、配置文件样例:

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory# Use the following property to configure the default connector
java.naming.provider.url = tcp://192.168.2.140:61616# Use the following property to specify the JNDI name the connection factory
# should appear as.
connectionFactoryNames = ConnectionFactory, queueConnectionFactory, topicConnectionFactry# Register some queues in JNDI using the form:
# queue.[jndiName] = [physicalName]
queue.MyQueue = example.MyQueue# Register some topics in JNDI using the form:
# topic.[jndiName] = [physicalName]
topic.MyTopic = example.MyTopic

释义:上面的url项要与第一章节里面的那个地址匹配;

topic.MyTopic中的点号分割开的第二部分(此例为MyTopic)会被注册为JNDI名, 至于value(example.MyTopic)为topic名,在Web Console可以看到。

 

queue.MyQueue同理。

 

2、配置文件完毕,下面介绍业务代码:

package com.ckl.activemq;
/*** The SimpleQueueSender class consists only of a main method,* which sends several messages to a queue.** Run this program in conjunction with SimpleQueueReceiver.* Specify a queue name on the command line when you run the* program. By default, the program sends one message. Specify* a number after the queue name to send that number of messages.*/import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import javax.jms.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;/*** A simple polymorphic JMS producer which can work with Queues or Topics which* uses JNDI to lookup the JMS connection factory and destination.*/
public class SimpleProducer {private static final Logger LOG = LoggerFactory.getLogger(SimpleProducer.class);private SimpleProducer() {}/*** @param args the destination name to send to and optionally, the number of* messages to send*/public static void main(String[] args) {Context jndiContext = null;ConnectionFactory connectionFactory = null;Connection connection = null;Session session = null;Destination destination = null;MessageProducer producer = null;String destinationName = null;final int numMsgs;
    //这边被我手动修改了,比较不喜欢每次运行时还要修改Run configuration,麻烦。args
&#61; new String[2];args[0] &#61; "MyTopic";args[1] &#61; "3";if ((args.length <1) || (args.length > 2)) {LOG.info("Usage: java SimpleProducer []");System.exit(1);}destinationName &#61; args[0];LOG.info("Destination name is " &#43; destinationName);if (args.length &#61;&#61; 2) {numMsgs &#61; (new Integer(args[1])).intValue();}else {numMsgs &#61; 1;}/** Create a JNDI API InitialContext object*/try {jndiContext &#61; new InitialContext();}catch (NamingException e) {LOG.info("Could not create JNDI API context: " &#43; e.toString());System.exit(1);}/** Look up connection factory and destination.*/try {connectionFactory &#61; (ConnectionFactory)jndiContext.lookup("ConnectionFactory");destination &#61; (Destination)jndiContext.lookup(destinationName);}catch (NamingException e) {LOG.info("JNDI API lookup failed: " &#43; e);System.exit(1);}/** Create connection. Create session from connection; false means* session is not transacted. Create sender and text message. Send* messages, varying text slightly. Send end-of-messages message.* Finally, close the connection.*/try {connection &#61; connectionFactory.createConnection();session &#61; connection.createSession(false, Session.AUTO_ACKNOWLEDGE);producer &#61; session.createProducer(destination);TextMessage message &#61; session.createTextMessage();for (int i &#61; 0; i ) {message.setText("This is message " &#43; (i &#43; 1));LOG.info("Sending message: " &#43; message.getText());producer.send(message);}/** Send a non-text control message indicating end of messages.*/producer.send(session.createMessage());}catch (JMSException e) {LOG.info("Exception occurred: " &#43; e);}finally {
       //睡眠是我手动加的&#xff0c;主要为了观察效果
try {Thread.sleep(100000L);} catch (InterruptedException e) {e.printStackTrace();}if (connection !&#61; null) {try {connection.close();}catch (JMSException ignored) {}}}}
}

代码不难理解&#xff1a;jndi读取配置文件&#xff0c;建立连接&#xff0c;发消息&#xff0c;关闭连接。

运行结果&#xff1a;

 

此时查看Web Console&#xff0c;

可以看到来自客户端的连接信息。

 

本例子就先到这里&#xff0c;详细还请参考贴的代码链接和官网文档。

欢迎留言交流。

 

转:https://www.cnblogs.com/grey-wolf/p/6526352.html



推荐阅读
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 大家好,我是李白。本文将分享一个从零开始的全栈项目,涵盖了设计、前端、后端和服务端的全面学习过程。通过这个项目,我希望能够帮助初学者更好地理解和掌握全栈开发的技术栈。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文详细介绍了如何使用Python中的smtplib库来发送带有附件的邮件,并提供了完整的代码示例。作者:多测师_王sir,时间:2020年5月20日 17:24,微信:15367499889,公司:上海多测师信息有限公司。 ... [详细]
  • 本文将详细介绍如何注册码云账号、配置SSH公钥、安装必要的开发工具,并逐步讲解如何下载、编译 HarmonyOS 2.0 源码。通过本文,您将能够顺利完成 HarmonyOS 2.0 的环境搭建和源码编译。 ... [详细]
  • 单元测试:使用mocha和should.js搭建nodejs的单元测试
    2019独角兽企业重金招聘Python工程师标准BDD测试利器:mochashould.js众所周知对于任何一个项目来说,做好单元测试都是必不可少 ... [详细]
  • 本文介绍了如何在 macOS 上安装 HL-340 USB 转串口驱动,并提供了详细的步骤和注意事项。包括下载驱动、关闭系统完整性保护、安装驱动以及验证安装的方法。 ... [详细]
  • 基于Web的Kafka管理工具Kafkamanager首次访问Web界面的详细配置指南(附图解)
    首次访问Kafkamanager Web界面时,需要对Kafka集群进行配置。这一过程相对简单,用户只需依次点击【Cluster】>【Add Cluster】,按照提示完成相关设置即可。本文将通过图文并茂的方式,详细介绍每一步的配置步骤,帮助用户快速上手Kafkamanager。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
author-avatar
手机用户2502920043
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有