如何从 Web 应用程序监听消息队列? (汤姆猫、ActiveMQ)

2024-01-06

我很高兴改善我的Web应用程序运行在 Apache 上Tomcat. An ActiveMQ添加JMS服务器来发送和接收消息。

我已经可以发送和接收消息,但需要接收方的帮助。

我的网络应用程序应该如何持续监听一个队列来接收消息?

新消息到达,服务器应对它们采取行动。例如:向数据库添加数据或发回消息。

我已经可以发送消息了。这是代码。

ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = factory.createConnection();
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("clientQueue");
MessageProducer publisher = session.createProducer(queue);
connection.start();

Message message = null;
message = session.createTextMessage("Text Message");
publisher.send(message);

我已经可以在请求后收到消息(单击;-))

connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("serverQueue");
consumer = session.createConsumer(destination);

while (true) {
    Message message = consumer.receive(300000);
    //Do message stuff
}

我应该如何让Web应用程序持续监听队列?建议的方式是什么?

热烈感谢所有帮助。谢谢。

编辑 - 解决方案

目前的工作解决方案以及来自DaveH https://stackoverflow.com/users/53300/daveh

我添加了一个 ServletContextListener 来连续监听我的消息。

web.xml

<listener>
    <listener-class>com.test.JMSContextListener</listener-class>
</listener>

听者:

public class JMSContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        Thread thread = new Thread(new JMSConnector());
        thread.start();
    }

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        //Nothing
    }
}

连接:

public class JMSConnector implements Runnable {
    public void run() {
        try {
            Context context = new InitialContext();
            QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup("java:comp/env/jms/ConnectionFactory");            
            Connection connection = factory.createConnection();
            Queue queue = (javax.jms.Queue) context.lookup("java:comp/env/jms/serverQueue");
            Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

            MessageConsumer consumer = session.createConsumer(queue);

            //This MessageListener will do stuff with the message
            MessageListenerImpl messageListener = new MessageListenerImpl();
            consumer.setMessageListener(messageListener);
            connection.start();

            // Start connection or nothing will happen!!!
            connection.start();
        } catch (JMSException ex) {
            //TODO
        } catch (NamingException ex) {
            //TODO
        }
    }
}

这是一种建议的方式还是应该改进?

热烈感谢所有帮助。谢谢。


如果您的代码已经可以使用队列中的消息(看来您确实这样做了),那么我认为您的问题归结为如何运行该代码段。

看来您没有使用任何框架,所以我认为我将采取的方法是采用可以从队列中检索消息的代码并在应用程序服务器中的单独线程中运行它。让该线程在应用程序服务器启动时启动,并在应用程序服务器关闭时自行清理。

在应用程序服务器启动时启动线程的最简单方法是引入 ServletContextListener (示例here http://www.mkyong.com/servlet/what-is-listener-servletcontextlistener-example/.) 在上下文侦听器中,在单独的线程中启动队列侦听代码。

EDIT:我使用了这个建议的解决方案并将上面的代码添加到问题中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Web 应用程序监听消息队列? (汤姆猫、ActiveMQ) 的相关文章

  • 两个整数乘积的模

    我必须找到c c a b mod m a b c m 是 32 位整数 但 a b 可以超过 32 位 我正在尝试找出一种计算 c 的方法 而不使用 long 或任何 gt 32 位的数据类型 有任何想法吗 如果m是质数 事情可以简化吗 注
  • 与 Eclipse 中的 Java Content Assist 交互

    作为我的插件项目的一部分 我正在考虑与 Eclipse 在 Java 文件上显示的内容辅助列表进行交互 我正在尝试根据一些外部数据对列表进行重新排序 我看过一些有关创建新内容辅助的教程 但没有看到有关更改现有内容辅助的教程 这可能吗 如果是
  • eclipse行号状态行贡献项是如何实现的?

    我需要更新状态行编辑器特定的信息 我已经有了自己的实现 但我想看看 eclipse 贡献项是如何实现的 它显示状态行中的行号 列位置 谁能指点一下 哪里可以找到源代码 提前致谢 亚历克斯 G 我一直在研究它 它非常复杂 我不确定我是否了解完
  • Thymeleaf 3 Spring 5 映射加载字符串而不是 HTML

    我正在尝试将 Spring 5 和 Thymeleaf 3 一起配置 我正在 Eclipse 上工作 我使用 全新安装 构建并使用 springboot run 运行应用程序 我已经设置了一个控制器和几个模板 但 Thymeleaf 似乎找
  • 什么是抽象类? [复制]

    这个问题在这里已经有答案了 当我了解抽象类时 我说 WT H 问题 创建一个无法实例化的类有什么意义呢 为什么有人想要这样的课程 什么情况下需要抽象类 如果你明白我的意思 最常见的是用作基类或接口 某些语言有单独的interface构建 有
  • Android中如何使用JNI获取设备ID?

    我想从 c 获取 IMEIJNI 我使用下面的代码 但是遇到了未能获取的错误cls 它总是返回NULL 我检查了环境和上下文 它们都没有问题 为什么我不能得到Context班级 我在网上搜索了一下 有人说我们应该使用java lang Ob
  • Java 中如何将 char 转换为 int? [复制]

    这个问题在这里已经有答案了 我是Java编程新手 我有例如 char x 9 我需要得到撇号中的数字 即数字 9 本身 我尝试执行以下操作 char x 9 int y int x 但没有成功 那么我应该怎么做才能得到撇号中的数字呢 ASC
  • 从jar中获取资源

    我有包含文件的 jar myJar res endingRule txt myJar wordcalculator merger Marge class 在 Marge java 中我有代码 private static final Str
  • Akka 与现有 java 项目集成的示例

    如果我已经有现有的javaWeb 应用程序使用spring and servlet容器 将 Akka 集成到其中的正确方法是什么 就像我将会有Actor1 and Actor2互相沟通的 开始使用这些演员的切入点是什么 例如 1 把它放在那
  • 在Java中运行bat文件并等待

    您可能会认为从 Java 启动 bat 文件是一项简单的任务 但事实并非如此 我有一个 bat 文件 它对从文本文件读取的值循环执行一些 sql 命令 它或多或少是这样的 FOR F x in CD listOfThings txt do
  • 如何将 HTML 链接放入电子邮件正文中?

    我有一个可以发送邮件的应用程序 用 Java 实现 我想在邮件中放置一个 HTML 链接 但该链接显示为普通字母 而不是 HTML 链接 我怎样才能将 HTML 链接放入字符串中 我需要特殊字符吗 太感谢了 Update 大家好你们好 感谢
  • 如何在JPanel中设置背景图片

    你好 我使用 JPanel 作为我的框架的容器 然后我真的想在我的面板中使用背景图片 我真的需要帮助 这是我到目前为止的代码 这是更新 请检查这里是我的代码 import java awt import javax swing import
  • Tomcat 服务器向 servlet 发出 3 个请求

    下面是我的doGet method WebServlet name IndexServlet urlPatterns home initParams WebInitParam name sortBy value Constants POPU
  • 如何区分从 Saxon XPathSelector 返回的属性节点和元素节点

    给定 XML
  • 为什么\0在java中不同系统中打印不同的输出

    下面的代码在不同的系统中打印不同的输出 String s hello vsrd replace 0 System out println s 当我在我的系统中尝试时 Linux Ubuntu Netbeans 7 1 它打印 When I
  • Hibernate 本机查询 - char(3) 列

    我在 Oracle 中有一个表 其中列 SC CUR CODE 是 CHAR 3 当我做 Query q2 em createNativeQuery select sc cur code sc amount from sector cost
  • 子类构造函数(JAVA)中的重写函数[重复]

    这个问题在这里已经有答案了 为什么在派生类构造函数中调用超类构造函数时 id 0 当创建子对象时 什么时候在堆中为该对象分配内存 在基类构造函数运行之后还是之前 class Parent int id 10 Parent meth void
  • Log4j2 ThreadContext 映射不适用于parallelStream()

    我有以下示例代码 public class Test static System setProperty isThreadContextMapInheritable true private static final Logger LOGG
  • Java/Python 中的快速 IPC/Socket 通信

    我的应用程序中需要两个进程 Java 和 Python 进行通信 我注意到套接字通信占用了 93 的运行时间 为什么通讯这么慢 我应该寻找套接字通信的替代方案还是可以使其更快 更新 我发现了一个简单的修复方法 由于某些未知原因 缓冲输出流似
  • java'assert'和'if(){}else exit;'之间的区别

    java和java有什么区别assert and if else exit 我可以用吗if else exit代替assert 也许有点谷歌 您应该记住的主要事情是 if else 语句应该用于程序流程控制 而assert 关键字应该仅用于

随机推荐

  • C++ 整数->std::字符串转换。功能简单?

    问题 我有一个整数 该整数需要转换为 stl string 类型 过去我用过stringstream进行转换 这有点麻烦 我知道 C 方法是做一个sprintf 但我更愿意做一个类型安全 呃 的 C 方法 有一个更好的方法吗 这是我过去使用
  • 使用并行集合就地转换数组

    当拥有一组对象时 通常需要 例如出于性能原因 更新 替换 某些对象 例如 如果您有一个整数数组 您可能希望将负整数替换为正整数 Faster for primitives var i 0 while i lt a length if a i
  • 将相等运算符与 boost::Optional 一起使用

    我试图为另一个命名空间中定义的类型 T 定义一个相等运算符 然后在optional
  • Asp.Net UpdatePanel错误

    我在我的 aspx 页面中使用 UpdatePanel 并使用 DropDownListonselectedindexchanged方法 第一次运行时onselectedindexchanged方法正在发挥作用 但是再次更改选择它会返回这样
  • 用于嵌入式 Tomcat 8.5 的 Tomcat Maven 插件

    我正在运行 Spring Web 应用程序 但无法使用 Tomcat 8 5 在最新的 Eclipse 中执行嵌入式 tomcatTomcat 7 Maven 插件 http tomcat apache org maven plugin t
  • ASP.Net Core:如何更新(更改/添加/删除)嵌套项对象(一对多关系)?

    我有一个带有 MSCustomers 和 MSLocations 的 Net 5 x 项目 MSLocations 与 MSCustomers 之间存在多对一的关系 我的 编辑 页面正确显示 MSCustomer 记录和相应的 MSLoca
  • 使用软键盘时不会调用 onKeyDown

    我的 Activity 的 xml 代码是
  • 如何使用 Mercurial 自动合并 2 个头

    我们刚刚从 subversion 切换到 Mercurial 有一件事比预期花费了更多的时间 合并头 我们喜欢这样一个事实 它使合并独立于 2 个提交 与 subversion 相比 但我们最终会定期合并 2 个头以进行不相关的更改 简单的
  • 隧道和冒泡事件何时在 WPF 中有用?

    我了解冒泡和隧道的工作原理 但是 我对使用它们感到困惑 原因如下 我想处理鼠标点击事件 要使其起泡 有MouseDown并且 为了隧道化 有PreviewMouseDown 然而 MouseDown并不一定意味着用户单击了该控件 可能是用户
  • 如何使用 Objective C iOS 删除 iPhone X 中表格视图顶部的多余空间

    我已经用 Objective C 开发了一个应用程序 它在所有 iPhone 手机上运行良好 但是当我在 iPhone X 模拟器中运行这个应用程序时 我不知道如何在 UITableView 的顶部获得一些额外的空间 大约 20 22 像素
  • 行高属性:正常+4px

    我想要normal行高加上 4px 我努力了 line height normal 4px 但这行不通 Note 我不想使用百分比进行近似 为什么不直接去掉 Chrome 的小焦点眩光呢 使用CSS属性outline none http j
  • 在管道中发送 EOF 而不关闭它

    我正在编写一个使用 GnuPlot 来绘制数据的应用程序 我决定使用 二进制 格式 而不是使用文本格式通过管道来通信两个程序 由于 vprintf 和传递的数据量很大 速度很慢 问题是 在二进制格式中 GnuPlot 期望 EOF Ctrl
  • Laravel 5.2:csrf 令牌不起作用

    您好 为什么我的 csrf 令牌值为 null 当我不使用令牌时 我没有 TokenMismatchException 我该如何解决它 我更深入地挖掘 发现会话没有在 SessionServiceProvider 中注册 是否需要启用某些功
  • 编写交叉兼容的 Python 2/3:__future__、6 和 future.utils 之间的区别?

    我正在编写交叉兼容的 Python 2 和 3 代码 并从中得到一些帮助备忘单 http python future org compatible idioms html 我注意到有不同的包和模块可以帮助做到这一点 future包 例如fu
  • SwiftUI 中模态表可以有导航栏吗?

    我在代码中通过导航栏按钮呈现模式表 struct MainPage View State var isModalSheetShown Bool false var body some View VStack navigationBarIte
  • 获取 StartDate 和 EndDate 之间的日期

    我有日期数组 我只需要获取两个不同日期 开始日期和结束日期 之间的日期 任何人都可以帮我解决这个问题吗 提前致谢 假设你有startDate and endDate类型的实例NSDate你可以 NSPredicate predicate N
  • 在 Nodejs 中防止开放重定向攻击安全吗?

    我正在尝试防止开放重定向攻击 请查看下面的代码并检查安全性 var require url http example com login redirect http example com dashboard app route login
  • 如何使用reactjs将图像上传到Firebase web v9

    我在使用 Web 版本 9 将图像上传到 Firebase 时遇到问题 我正在关注他正在其中构建 Facebook 克隆的平台之一的教程 我被困在 firebase 上传图像和文件的这一部分 我检查了 firebase 的文档 并尝试找出应
  • 在 IIS7 上部署 TestSwarm

    有人成功了吗 我能够得到一些东西 使用 PHP over FastCGI MySql 数据库和 URL Rewriter 2 0 Beta 但大多数代码依赖于 RewriteBase 规则 而 IIS 重写器尚不支持该规则 不用说 将其部署
  • 如何从 Web 应用程序监听消息队列? (汤姆猫、ActiveMQ)

    我很高兴改善我的Web应用程序运行在 Apache 上Tomcat An ActiveMQ添加JMS服务器来发送和接收消息 我已经可以发送和接收消息 但需要接收方的帮助 我的网络应用程序应该如何持续监听一个队列来接收消息 新消息到达 服务器