热门标签 | 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



推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • Firefox火狐浏览器关闭到http://detectportal.firefox.com的流量问题解决办法
    本文介绍了使用Firefox火狐浏览器时出现关闭到http://detectportal.firefox.com的流量问题,并提供了解决办法。问题的本质是因为火狐默认开启了Captive portal技术,当连接需要认证的WiFi时,火狐会跳出认证界面。通过修改about:config中的network.captive-portal-service.en的值为false,可以解决该问题。 ... [详细]
  • 【MEGA DEAL】Ruby on Rails编码训练营(97%折扣)限时特惠!
    本文介绍了JCG Deals商店提供的Ruby on Rails编码训练营的超值优惠活动,现在只需29美元即可获得,原价为$1,296。Ruby on Rails是一种用于Web开发的编程语言,即使没有编程或网页设计经验,也能在几分钟内构建专业的网站。该训练营共有6门课程,包括使用Ruby on Rails进行BDD的课程,使用RSpec 3和Capybara等。限时特惠,机会难得,赶快行动吧! ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
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社区 版权所有