- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些架构问题。我开发了一个在 glassfish appserver 上运行的 wicket web 应用程序,有一些 ejb 模块等。为了创建聊天面板,我想使用某种 JMS,例如 Apache ActiveMQ 来避免连续轮询。我制作了两种处理程序 Sender
和 Receiver
。它们都有ConnectionFactory、Connecton、Session。聊天面板代表聊天室,每个聊天室是一个主题。 (当您打开一个带有选择的“房间”的聊天面板时,您在逻辑上订阅了给定的主题。)面板实现了 MessageListener 接口(interface),因此面板是 Receiver 对象中消费者的监听器。
因此面板将消息发送到其 Sender 对象中的主题,并通过其 Receiver 对象收听它们。 (是的,每个面板都有一个 Sender
和一个 Receiver
对象)
这样就有 2 个连接/面板,根本没有人关心关闭这些连接。 :(
我认为这不是使用 activemq 的好方法。我需要一些建议来实现这个功能。请问各位高手是怎么操作的?或者我必须去哪个方向?
(ps,AMQ 已经完全独立运行)
发件人,
public class Sender {
private String user = ActiveMQConnection.DEFAULT_USER;
private String password = ActiveMQConnection.DEFAULT_PASSWORD;
private String url = "failover://(tcp://0.0.0.0:61616)?randomize=false";
private Destination destination;
private Connection connection = null;
private Session session = null;
private ActiveMQConnectionFactory connectionFactory;
private MessageProducer producer;
public Sender(String topicId) {
try {
connectionFactory = new ActiveMQConnectionFactory(user, password, url);
connectionFactory.setDispatchAsync(false);
connection = connectionFactory.createTopicConnection(user, password);
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
destination = session.createTopic(topicId);
producer = session.createProducer(destination);
} catch (JMSException ex) {
Logger.getLogger(Sender.class.getName()).log(Level.SEVERE, null, ex);
System.out.println(ex.toString());
}
}
public void sendMessage(String message) {
try {
BytesMessage message = session.createBytesMessage();
message.setLongProperty("text", message);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
producer.send(destination, message);
} catch (JMSException ex) {
Logger.getLogger(Sender.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void close() {
try {
producer.close();
session.close();
connection.close();
} catch (JMSException ex) {
Logger.getLogger(Sender.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
接收者,
public class Receiver {
private String url = "failover://(tcp://0.0.0.0:61616)?randomize=false";
private ActiveMQConnectionFactory connectionFactory;
private Connection connection;
private Session session = null;
private Topic destination = null;
private TopicSubscriber consumer;
private IdGenerator clientIdGenerator = new IdGenerator();
public Receiver(String topicId, MessageListener listener) {
try {
connectionFactory = new ActiveMQConnectionFactory(url);
connectionFactory.setDispatchAsync(false);
connection = connectionFactory.createTopicConnection();
connection.setClientID(clientIdGenerator.generateId());
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
destination = session.createTopic(topicId);
consumer = session.createDurableSubscriber(destination, "subscriber");
consumer.setMessageListener(listener);
} catch (JMSException ex) {
Logger.getLogger(Receiver.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void close() {
try {
consumer.close();
session.close();
connection.close();
} catch (JMSException ex) {
onException(ex);
Logger.getLogger(Receiver.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
最佳答案
To create chat panel i would like to use some kind of JMS, for example Apache ActiveMQ to avoid continuous polling.
您描述的设置仍然需要连续轮询!您的聊天面板是服务器端 Wicket 组件。您仍然需要从那些服务器端 Wicket 组件获取聊天数据到客户端(浏览器),这需要通过 Javascript 进行连续轮询。您可以实现自己的 Wicket 行为来完全做到这一点,但它仍然在进行轮询。
如果您想完全避免连续轮询,则必须使用 WebSockets。 Wicket 有一个用于支持 websocket 的实验模块 (https://cwiki.apache.org/confluence/display/WICKET/Wicket+Native+WebSockets)。但是,websocket 不适用于旧版浏览器。
关于java - 通过 JMS 聊天。如何链接组件? ( Wicket 口、activemq、j2ee),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17371441/
场景: private readonly IConnection connection; this.connection = connectionFactory.CreateConnection();
想知道是否可以在 activeMQ 服务器中完成任何配置,将消息从 DLQ 重定向到同一服务器上的另一个队列。 例如。 我有一个队列“MAINQUEUE”,其中有很多消息已激活客户端确认,在处理时如果
我正在 ActiveMQ 中的一个系统上工作,我真的不想丢失消息。我的问题是重试消息导致我的消费者阻塞(而不是处理他们可以处理的消息)。我想给失败的消息几天重试(例如,我的潜在目的地之一是我将通过 S
我们对 AMQ 使用以下配置 定期我有奇怪的问题 - 松散的消息。实际上AMQ说一切正常并且消
我已按照教程安装 ActiveMQ http://servicebus.blogspot.com/2011/02/installing-apache-active-mq-on-ubuntu.html
当我们使用 ActiveMQ 时,我们可以信任 ActiveMQ 服务器的可靠性。例如在开发非实时软件时(不需要立即发送数据。但应该发送)。我们能否信任 activeMQ 作为确认消息传递的可靠来源。
我遇到了 issue使用 ActiveMQ 并希望跟踪/查看所有 ActiveMQ 事件。我能找到的唯一日志文件是与持久数据相关联的(如果打开的话)。我是否查看或生成了任何其他日志文件来告诉我 Act
我们正面临 ActiveMQ 及其使用者的随机问题。我们观察到,即使连接到 ActiveMQ 队列,也很少有消费者没有收到消息。但是在消费者重启后它工作正常。 我们在 ActiveMQ 端有一个名为
有什么方法可以跟踪 ActiveMQ 中的延迟(计划)消息? 我在 AMQ 网络控制台中没有看到任何东西,它们似乎只有在延迟到期时才进入队列……而且我在 JMX 控制台中也找不到它,也许我搜索得不够好
我对Apache ActiveMQ的功能感到困惑。 我从this link下载了ActiveMQ 。所以我这样使用它(环境:Windows 7):我启动 bin/activemq.bat,然后它就可以
我们有一个 ActiveMQ 代理,它使用 JMS、AMQP 和 MQTT 连接到不同的客户端。由于某种原因,我们还没有弄清楚一组特定的 MQTT 客户端经常(并非总是)持久订阅。这是一个测试环境,其
在activemq中有什么方法可以获取消息的数量代理端每秒/每分钟消耗/产生的数量? 我已经尝试使用http://activemq.apache.org/jmeter-performance-test
如何在队列上的 ActiveMQ 中设置 redeliveryPolicy? 1) 在文档中,请参阅:activeMQ Redelivery ,说明您应该在 ConnectionFactory 或 C
我查了一下,它用于在两个系统之间发送消息。 但为什么?为什么不直接使用数据库? 一定有一些 ActiveMQ 具有 数据库 没有的功能吗? 最佳答案 它用于在两个分布式进程之间进行可靠的通信。 是的,
我在生产系统中运行 ActiveMQ。我们的一些队列的流量非常大,而有些队列的流量非常低。我对镜像其中一个低容量队列感兴趣,这样我就可以围绕接收到的消息构建非正式的监控服务。 不幸的是,the onl
我们已经使用此配置为 ActiveMQ Broker 配置了 Broker redelivery 插件。
有什么方法可以检查特定队列是否已存在于 ActiveMQ 中? 最佳答案 http://activemq.apache.org/how-can-i-get-a-list-of-the-topics-a
有人知道如何将 activemq-core.xsd url 与 jar 文件 (activemq-core-5.2.0.jar) 中的 activemq.xsd 关联起来? 我在互联网上找到了一些解决
我是 activemq 的新手。我试图使用 activemq 代理来订阅/发布消息。但至于缺乏经验,我不知道该怎么做,也不知道是否真的可以做到。我在谷歌上搜索了很多,但不幸的是,没有适合此类功能的示例
我一直在努力配置 ActiveMQ 代理,让我感到困惑的一件事是,我读过的所有内容都将 NIO 描述为“如果您需要扩展的不错选择”或“如果您需要更快的速度” ,所以我的问题是他们为什么不说“总是使用
我是一名优秀的程序员,十分优秀!