JMS捕获ORACLE高级队列数据,JMS-130: JMS 队列不能启用多个使用者

qq_33325842 2018-03-06 03:43:55
QueueConnectionFactory queueConnectionFactory = null;
QueueConnection queueConnection = null;
QueueSession queueSession = null;

Queue queue = null;
QueueReceiver subscriber = null;
Message message = null;

try{
Properties properties = new Properties();
InputStream in = this.getClass().getClassLoader().getResourceAsStream("aqDBC.properties");
//配置文件内容
//hostname=192.168.1.118
//sid=fuguo
//port=1521
//driver=thin

//user=stradmin
//password=stradmin


properties.load(in);

queueConnectionFactory = AQjmsFactory.getQueueConnectionFactory(properties.getProperty("hostname")
,properties.getProperty("sid"), Integer.valueOf(properties.getProperty("port")),
properties.getProperty("driver"));
queueConnection = queueConnectionFactory.createQueueConnection(properties.getProperty("user"),
properties.getProperty("password"));

queueConnection.start();

queueSession = queueConnection.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
//这行代码报错:oracle.jms.AQjmsException: JMS-130: JMS 队列不能启用多个使用者 JMS-130 这个问题,没弄清楚是怎么出现的
queue = ((AQjmsSession) queueSession).getQueue("stradmin", "JMS_QUEUE"); //问题主要在这
subscriber = queueSession.createReceiver(queue);
subscriber.setMessageListener(new MessageListener() {//底下这块 就没什么大用了

@Autowired
private RealTimeCashInterfaceAction realTimeCashInterfaceAction;

@Override
public void onMessage(Message message) {//待确定 字段名待修改
try {

} catch (Exception e) {
e.printStackTrace();
}
}
});
} catch(Exception e){
e.printStackTrace();
}


ORACLE部分
JMS_QUEUE队列
begin
sys.dbms_aqadm.create_queue(
queue_name => 'JMS_QUEUE',
queue_table => 'JMS_QUEUE_TABLE',
queue_type => sys.dbms_aqadm.normal_queue,
max_retries => 5,
retry_delay => 0,
retention_time => 0);
end;
/

所有者就是STRADMIN

...全文
575 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianfang 2018-03-12
  • 打赏
  • 举报
回复
你用了什么框架,应该支持MDB,学着写
tianfang 2018-03-07
  • 打赏
  • 举报
回复
一般约定是一个queue只有一个消费者,最好的方式是MDB,消息驱动bean 你写的这段代码是bean,还是客户端的一部分,是否存在并发? 一定要多个消费者并发,可以改为topic,但是消息的复制多份分发的
qq_33325842 2018-03-07
  • 打赏
  • 举报
回复
引用 1 楼 tianfang 的回复:
一般约定是一个queue只有一个消费者,最好的方式是MDB,消息驱动bean 你写的这段代码是bean,还是客户端的一部分,是否存在并发? 一定要多个消费者并发,可以改为topic,但是消息的复制多份分发的
而且我不是太明白您说的驱动bean是什么.....不是太懂,我这个方法就是 服务启动的时候加载的一个方法
qq_33325842 2018-03-07
  • 打赏
  • 举报
回复
引用 1 楼 tianfang 的回复:
一般约定是一个queue只有一个消费者,最好的方式是MDB,消息驱动bean 你写的这段代码是bean,还是客户端的一部分,是否存在并发? 一定要多个消费者并发,可以改为topic,但是消息的复制多份分发的
现在我这边是开发环境上,用的是一个数据库,一个系统上应该是只有一个消费者,但是可能会同时启动多个系统,这样的话算多个消费者吗,而且topic 我也看了一下,有一个地方不是太明白 AQjmsConsumer subscriber = (AQjmsConsumer)session.createDurableSubscriber(topic, SubscriberName ); 这个SubscriberName 指的是什么 , 我在数据库的队列定义里面找了好久都没有找到 这个东西

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧