如何创建基本的高级队列之二:创建接收方代码

/*

基本组成

接收方(DB2 ):

Queue type :决定接收消息的类型

Queue table :消息接收的载体

Queue :队列

*/

 

--接收方(DB2 )代码:

-----------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------

--请先打开文件 CODE_SENDER.SQL 在接收方(DB1 )数据库执行

-----------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------

--用账户 SYS 登录

--1.创建 AQ_RECEIVER 用户并赋权

create user WMS_APP identified by "oppo";

grant connect,resource,aq_administrator_role,unlimited tablespace to WMS_APP;

grant create database link to WMS_APP;

grant execute on dbms_aq to WMS_APP;

grant execute on dbms_aqadm to WMS_APP;

begin

dbms_aqadm.grant_system_privilege('ENQUEUE_ANY', 'WMS_APP', FALSE);

dbms_aqadm.grant_system_privilege('DEQUEUE_ANY', 'WMS_APP', FALSE);

end;

 

--用账户 AQ_RECEIVER 登录

--2.创建一个队列载体对象,一个没有 body 的 type 在 AQ_RECEIVER 下

create or replace type TS_BILL_TRANSFER as object

(

  "BILL_NO" VARCHAR2(30),

  "LINE_NUMBER" NUMBER,

  "STOCK_NO" VARCHAR2(10),

  "TO_STOCK_NO" VARCHAR2(10),

  "LOCATION" VARCHAR2(60),

  "PART_NO" VARCHAR2(60),

  "PART_DESC" VARCHAR2(240),

  "PART_QTY" NUMBER,

  "OPERATOR" VARCHAR2(30),

  "DATETIME_CREATED" DATE

);

 

--4.创建队列表

begin

-- Call the procedure

sys.dbms_aqadm.create_queue_table(queue_table => 'QT_BILL_TRANSFER',

          queue_payload_type => 'TS_BILL_TRANSFER',--这就是我们定义的 type

          sort_list => 'priority,enq_time',--按优先级和入列时间排序

          multiple_consumers => TRUE, --多消费者

          comment => 'QUEUE FOR RECEIVE BILL-TRANSFER DATA FROM WMS',

          auto_commit => FALSE --手动控制事务--create queue

          );

end;

 

--5.创建队列

begin

sys.dbms_aqadm.create_queue(

queue_name => 'Q_BILL_TRANSFER',

queue_table => 'QT_BILL_TRANSFER',--刚刚建立的queue表

queue_type => sys.dbms_aqadm.normal_queue,

max_retries => 3,--dequeue失败后重试次数

retry_delay => 1,--重试前等待

retention_time => 0 --dequeue后保持时间,不保持

);

end;

 

--6.启动队列

begin

dbms_aqadm.start_queue('Q_BILL_TRANSFER',true,true);

end;

 

--7.创建消息订阅者

DECLARE

subscriber sys.aq$_agent;

BEGIN

subscriber := sys.aq$_agent('WMS_APP', NULL, NULL);

DBMS_AQADM.ADD_SUBSCRIBER(queue_name => 'Q_BILL_TRANSFER', subscriber => subscriber);

--DBMS_AQADM.remove_subscriber(queue_name => 'Q_BILL_TRANSFER', subscriber => subscriber);

END;

 

--8.创建业务相关数据表

create table INV_SP_BILL_TRANSFER

(

INFO VARCHAR2(100),

MESSAGE TS_BILL_TRANSFER

);

 

--9.出列测试(该段代码每执行一次,只取出一条 Queue 数据)

declare

v_Message TS_BILL_TRANSFER;

v_MsgId RAW(16);

v_options DBMS_AQ.DEQUEUE_OPTIONS_T;

v_properties DBMS_AQ.MESSAGE_PROPERTIES_T;

v_Recipients DBMS_AQ.AQ$_RECIPIENT_LIST_T;

begin

--v_Recipients(0) := sys.aq$_agent('NOTE','MTQ',0);

--v_properties.recipient_list := v_Recipients;

v_options.visibility :=DBMS_AQ.IMMEDIATE;

v_options.consumer_name := 'WMS_APP';

dbms_aq.dequeue(queue_name => 'Q_BILL_TRANSFER',dequeue_options => v_options,message_properties =>

v_properties,payload => v_Message,msgid => v_MsgId);

dbms_output.put_line('decode success,msgid is '||v_MsgId);

dbms_output.put_line('subject is '||v_Message.BILL_NO);

INSERT INTO INV_SP_BILL_TRANSFER VALUES('Get message on ',v_Message);

end;

 

--查询QTABLE

SELECT * FROM QT_BILL_TRANSFER;

--查询操作的数据

SELECT * FROM INV_SP_BILL_TRANSFER;

 

 

SELECT * FROM Q_TEST;

 

--QUEUE 相关查询

select * from user_queue_tables;

select * from user_queues;

select * from user_queue_subscribers;

select * from user_queue_schedules;

SELECT * FROM USER_QUEUE_PUBLISHERS;

 

 

 

转载于:https://www.cnblogs.com/blue-sword/archive/2013/01/08/2851255.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: const { Kafka } = require('kafkajs'); const kafka = new Kafka({ clientId: 'my-app', brokers: ['localhost:9092'] }); const producer = kafka.producer() const sendMessage = async () => { try { await producer.connect() await producer.send({ topic: 'my-topic', messages: [ { value: 'Hello KafkaJS!' }, ], }) await producer.disconnect() console.log('Message sent successfully') } catch (error) { console.error('Error while sending message', error) } } sendMessage(); ### 回答2: KafkaJS是一个用于与Kafka消息队列进行交互的Node.js客户端库。它提供了一种便捷的式来创建Kafka连接,并进行消息的发送和接收。 下面是使用KafkaJS创建连接的示例代码: ```javascript const { Kafka } = require("kafkajs"); async function connect() { try { const kafka = new Kafka({ clientId: "my-app", brokers: ["localhost:9092"] // 设置Kafka的broker地址 }); const producer = kafka.producer(); // 创建一个生产者实例 await producer.connect(); // 连接到Kafka集群 const consumer = kafka.consumer({ groupId: "test-group" }); // 创建一个消费者实例 await consumer.connect(); // 连接到Kafka集群 } catch (error) { console.error("Failed to connect:", error); } } connect(); ``` 以上示例代码展示了如何使用KafkaJS创建一个Kafka连接。首,我们通过`require`语句导入了`kafkajs`模块。然后,我们使用`Kafka`构造函数创建了一个Kafka实例,其中传入了一个包含broker地址的配置对象。 接着,我们使用`kafka.producer()`创建了一个生产者实例,并使用`await producer.connect()`法连接到Kafka集群。类似地,我们使用`kafka.consumer()`创建了一个消费者实例,并使用`await consumer.connect()`法连接到Kafka集群。 在实际应用中,你还可以在配置对象中设置其他的属性,如认证信息、SSL选项等。 总之,KafkaJS提供了一种便的式来创建Kafka连接,并进行消息的生产和消费。通过上述示例代码,你可以了解到如何使用KafkaJS提供的法和参数来创建连接。 ### 回答3: KafkaJS是一个开源的Node.js库,用于与Apache Kafka进行交互。它提供了简单易用的API,用于创建连接并与Kafka集群进行通信。 以下是KafkaJS提供的连接法的示例代码: 1. 引入KafkaJS库: ```javascript const { Kafka } = require('kafkajs'); ``` 2. 创建Kafka实例,并指定Kafka集群的连接信息: ```javascript const kafka = new Kafka({ clientId: 'my-app', brokers: ['kafka1:9092', 'kafka2:9092'] // 指定Kafka集群中的各个broker的地址和端口 }); ``` 3. 创建一个生产者并连接到Kafka集群: ```javascript const producer = kafka.producer(); await producer.connect(); ``` 4. 创建一个消费者并连接到Kafka集群: ```javascript const consumer = kafka.consumer({ groupId: 'my-group' }); await consumer.connect(); ``` 5. 使用生产者发送消息到指定的主题(topic): ```javascript await producer.send({ topic: 'my-topic', messages: [ { value: 'Hello KafkaJS!' } ] }); ``` 6. 使用消费者订阅指定主题,并处理接收到的消息: ```javascript await consumer.subscribe({ topic: 'my-topic' }); await consumer.run({ eachMessage: async ({ topic, partition, message }) => { console.log({ value: message.value.toString(), headers: message.headers }); } }); ``` 7. 断开连接: ```javascript await producer.disconnect(); await consumer.disconnect(); ``` 通过以上示例代码,我们可以使用KafkaJS库创建连接并在Kafka集群与生产者、消费者之间进行消息传递。当然,还有其他一些高级特性和配置选项可以进一步定制和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值