当前位置: 首页 > 知识库问答 >
问题:

IBM JT400 获取数据队列条目数

赵健柏
2023-03-14

我在AS400/iSeries中使用数据队列,并使用jdbc jt400库从其中读取数据。

由于它是生产者(AS400)/消费者(myapp)模式,我想检查数据队列中现在有多少条目,并测量我的应用程序是否运行得足够快或我需要更改某些内容。

我可以获取数据队列的最大长度/大小,但不能获取当前长度/大小。

我如何获得或计算该值?

我可以使用rpg程序并调用它,但更喜欢jt400/jdbc解决方案

谢谢

我编辑这个问题以添加应该执行此任务的代码,但我得到一个例外:

    String pname = "/QSYS.LIB/QMHQRDQD.PGM";
    int param0_size = 120; // RDQD0100 size
    int size = -1;
    ProgramCall spgm = new ProgramCall(as400);
    ProgramParameter[] params = new ProgramParameter[4];
    params[0] = new ProgramParameter(param0_size);
    AS400Bin4 length = new AS400Bin4();
    params[1]  = new ProgramParameter(length.toBytes(param0_size));
    AS400Text formatname = new AS400Text(8);
    params[2] = new ProgramParameter(formatname.toBytes("RDQD0100"));
    AS400Text dataqueuename = new AS400Text(20);
    params[3] = new ProgramParameter(dataqueuename.toBytes("DTQDTQ    LIBFIC    "));
    byte[] RDQD0100 = new byte[120];

    try {
        spgm.setProgram(pname, params);
        if (spgm.run() == true) {
            AS400Text out = new AS400Text(param0_size);
            RDQD0100 = out.toBytes(params[0].getOutputData());
            ByteBuffer bb = ByteBuffer.wrap(RDQD0100);
            bb.position(76);  // Number of entries currently allocated
            size = bb.getInt();
        }
    }
    catch (Exception e){
        Logger.error(" ERROR {} ", e);
    }

    return size;

我总是得到-1作为答案和RDQD0100=out.toB行中的异常。

例外情况是

java.lang.ClassCastException: [B 不能强制转换为 java.base/java.lang.String

有什么线索吗?再次感谢

共有2个答案

孔经武
2023-03-14

使用base JT400,似乎没有办法获得数据队列中的条目数。

您可以使用 QMHQRDQD API 来获取队列中的消息数。

宰父淳
2023-03-14

好的,我发现我的问题中增加了代码的失败,并想分享解决方案。

此代码返回库 LIBFIC 上数据队列 DTQDTQ 中的当前条目数,如果发生错误/异常,则返回 -1。

int getDQSize() {

    String pname = "/QSYS.LIB/QMHQRDQD.PGM";
    int param0_size = 120; // RDQD0100 size
    int size = -1;
    ProgramCall spgm = new ProgramCall(as400);
    ProgramParameter[] params = new ProgramParameter[4];
    params[0] = new ProgramParameter(param0_size);
    AS400Bin4 length = new AS400Bin4();
    params[1]  = new ProgramParameter(length.toBytes(param0_size));
    AS400Text formatname = new AS400Text(8);
    params[2] = new ProgramParameter(formatname.toBytes("RDQD0100"));
    AS400Text dataqueuename = new AS400Text(20);
    params[3] = new ProgramParameter(dataqueuename.toBytes("DTQDTQ    LIBFIC    "));
    byte[] RDQD0100 = new byte[120];

    try {
        spgm.setProgram(pname, params);
        if (spgm.run() == true) {
            ByteBuffer bb = ByteBuffer.wrap(params[0].getOutputData());
            bb.position(72);
            size = bb.getInt();
        }
    }
    catch (Exception e){
        Logger.error(" ERROR {} ", e);
    }

    return size;
}

再次感谢David G

 类似资料:
  • 数据队列接口 结构体 struct   rt_data_queue   数据队列控制块 更多...   宏定义 #define  RT_DATAQUEUE_EVENT_UNKNOWN   0x00   未知数据队列事件   #define  RT_DATAQUEUE_EVENT_POP   0x01   数据队列取出事件   #define  RT_DATAQUEUE_EVENT_PUSH   0

  • 问题内容: 我们正在使用amqplib来发布/使用消息。我希望能够读取队列中的消息数(理想情况下是已确认和未确认)。这将使我能够向管理员用户显示良好的状态图,并检测某个组件是否无法满足负载需求。 我在amqplib文档中找不到有关读取队列状态的任何信息。 有人可以指出我正确的方向吗? 问题答案: 使用皮卡: 使用PyRabbit: 使用HTTP 句法: 例: 注意:默认虚拟主机是需要转义为 使用C

  • 问题内容: 我想获取基于条件选择的数据帧行数。我尝试了以下代码。 输出: 输出显示数据帧中每一列的计数。相反,我需要获得满足以上所有条件的单一计数?这该怎么做?如果您需要有关我的数据框的更多说明,请告诉我。 问题答案: 您要的是所有条件都为真的条件,所以答案是len,除非我误解了您的要求

  • 我试图创建java可以访问EMS队列检查挂起消息的类,但在下面是我的简单代码 “我尝试做什么”方法可以给他队列名称它是“给我挂起的消息” 错误:运行:线程“main”java中出现异常。lang.NoClassDefFoundError:com/tibco/tibjms/TibjmsQueueConnectionFactory位于com。tibco公司。tibjms。管理MessengerUtil

  • 问题内容: 假设我有一个这样的搜索查询: 如您所知,例如,我得到这样的结果: 但是我 没有 得到一周中没有创建任何条目的日子。 如何获得看起来像这样的搜索结果, 包括 没有创建条目的日子? 问题答案: SELECT day, COALESCE(ct, 0) AS ct FROM (SELECT now()::date - d AS day FROM generate_series (0, 6) d

  • 嗨,伙计们,我正在使用Laravel5.5,我有两个表,用户和服务 用户表 ID 名称 电子邮件 密码 地址 城市 国家 邮政编码 null 提前谢了。热烈问候:阿卜杜拉·沙希德。

  • 如何将spark数据框中的所有列名放入Seq变量中。 输入数据 我需要使用scala编程将所有列名存储在变量中。我尝试了如下方法,但不起作用。 预期输出:

  • 数组实现简单队列 class Node(object): def __init__(self, data): self.data = data self.next = None def __str__(self) -> str: return '(data=%d)' % self.data class SimpleQueue(o