activemq_ConsumerTool

package avtivemq.test;

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.MessageListener;
import javax.jms.Message;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class ConsumerTool implements MessageListener {

private String user = ActiveMQConnection.DEFAULT_USER;

private String password = ActiveMQConnection.DEFAULT_PASSWORD;

private String url = ActiveMQConnection.DEFAULT_BROKER_URL;

private String subject = "TOOL.DEFAULT";

private Destination destination = null;

private Connection connection = null;

private Session session = null;

private MessageConsumer consumer = null;

// 初始化
private void initialize() throws JMSException, Exception {
// 连接工厂是用户创建连接的对象,这里使用的是ActiveMQ的ActiveMQConnectionFactory根据url,username和password创建连接工厂。
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
user, password, url);
// 连接工厂创建一个jms connection
connection = connectionFactory.createConnection();
// 是生产和消费的一个单线程上下文。会话用于创建消息的生产者,消费者和消息。会话提供了一个事务性的上下文。
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); // 不支持事务
// 目的地是客户用来指定他生产消息的目标还有他消费消息的来源的对象,两种消息传递方式:点对点和发布/订阅
destination = session.createTopic(subject);
// 会话创建消息的生产者将消息发送到目的地
consumer = session.createConsumer(destination);

}

// 消费消息
public void consumeMessage() throws JMSException, Exception {
initialize();
connection.start();

System.out.println("Consumer:->Begin listening...");
// 开始监听
consumer.setMessageListener(this);
// Message message = consumer.receive();
}

// 关闭连接
public void close() throws JMSException {
System.out.println("Consumer:->Closing connection");
if (consumer != null)
consumer.close();
if (session != null)
session.close();
if (connection != null)
connection.close();
}

public void onMessage(Message message) {
try {
DefaultMessageConverter converter = new DefaultMessageConverter();
Object obj= converter.fromMessage(message);
User user = null;
if(obj instanceof User){
user = (User)obj;
System.out.println("true");
}
if(obj instanceof Person){
System.out.println("false");
}
System.out.println("Consumer:->Received: " + user.getUsername());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
### 配置 ActiveMQ 的 `ACTIVEMQ_OPTS_MEMORY` 参数 `ACTIVEMQ_OPTS_MEMORY` 是 Apache ActiveMQ 中用于配置 JVM 内存选项的重要参数。该参数通常用于设置 Java 堆内存大小,以确保 ActiveMQ 在运行时具有足够的内存资源,同时避免超出系统资源限制。 在 Unix/Linux 系统中,`ACTIVEMQ_OPTS_MEMORY` 的配置通常在环境配置文件或脚本中完成。根据不同的使用场景和操作系统,可以采取以下几种方式进行配置: #### 1. 在 `env` 脚本中配置 `ACTIVEMQ_OPTS_MEMORY` 如果使用的是 Unix/Linux 系统,可以在 ActiveMQ 的 `env` 脚本中直接设置 `ACTIVEMQ_OPTS_MEMORY` 参数。通常,该文件位于 `$ACTIVEMQ_HOME/bin/env` 路径下。 ```sh # 示例:设置 ACTIVEMQ_OPTS_MEMORY if [ -z "$ACTIVEMQ_OPTS_MEMORY" ]; then ACTIVEMQ_OPTS_MEMORY="-Xms256M -Xmx1G" fi ``` 上述配置将 JVM 的初始堆内存设置为 `256MB`,最大堆内存设置为 `1GB` [^1]。 #### 2. 修改 `.activemqrc` 文件 在某些 Linux 环境下,ActiveMQ 可能会使用用户目录下的 `.activemqrc` 文件进行配置。如果没有找到该文件,可以运行一次 ActiveMQ,系统会自动生成该文件。 找到 `.activemqrc` 文件后,修改 `ACTIVEMQ_OPTS_MEMORY` 参数: ```sh # 示例:设置 ACTIVEMQ_OPTS_MEMORY ACTIVEMQ_OPTS_MEMORY="-Xms512M -Xmx2G" ``` 该配置将初始堆内存设置为 `512MB`,最大堆内存设置为 `2GB` [^2]。 #### 3. 在 `activemq` 可执行文件中直接配置 在 Unix/Linux 系统中,`activemq` 可执行文件是一个启动脚本。可以在该脚本中直接设置 `ACTIVEMQ_OPTS_MEMORY`: ```sh # 示例:在 activemq 脚本中配置 ACTIVEMQ_OPTS_MEMORY if [ -z "$ACTIVEMQ_OPTS" ]; then ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS_MEMORY -Djava.util.logging.config.file=logging.properties -Djava.security.auth.login.config=$ACTIVEMQ_CONF/login.config" fi ``` 确保 `ACTIVEMQ_OPTS_MEMORY` 已经在脚本中定义: ```sh ACTIVEMQ_OPTS_MEMORY="-Xms128M -Xmx512M" ``` 该配置将初始堆内存设置为 `128MB`,最大堆内存设置为 `512MB` [^3]。 #### 4. 调整线程管理以优化内存使用 在某些情况下,ActiveMQ 的线程管理也会影响内存消耗。可以通过设置以下参数来限制线程数量,从而减少内存占用: ```sh # 示例:在 activemq.bat 文件中配置线程管理参数 ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS -Dorg.apache.activemq.UseDedicatedTaskRunner=false" ``` 此参数将禁用专用任务运行器,使用线程池来管理线程资源 [^4]。 ### 总结 - 在 Unix/Linux 系统中,可以通过 `env` 脚本、`.activemqrc` 文件或 `activemq` 可执行文件来配置 `ACTIVEMQ_OPTS_MEMORY`。 - 配置时,建议根据系统资源和负载情况合理设置 `-Xms` 和 `-Xmx` 参数。 - 通过调整线程管理参数,可以进一步优化内存使用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值