activemq jdbc mysql_ActiveMQ使用JDBC持久化

步骤一:创建一个数据库

步骤二:配置activemq.xml配置文件

1.在persistenceAdapter加入如下配置

第一次为true是为了创建表,之后的每次都不创建,使用第一次创建的表保存数据

2.配置数据源

在beans节点中

b7a8e87b2a23d526d2d25f5d72fe7601.png

3.将数据库连接Jar放到activemq解压的lib文件夹下

8e94b1e6b2f526a38632693273bbe0ee.png

步骤三:重新启动activemq

重启后刷新数据库,会生成三张表

be9506d595107a09655b76e628b10844.png

activemq_msgs用于存储消息,Queue和Topic都存储在这个表中:

ID:自增的数据库主键

CONTAINER:消息的Destination

MSGID_PROD:消息发送者客户端的主键

MSG_SEQ:是发送消息的顺序,MSGID_PROD+MSG_SEQ可以组成JMS的MessageID

EXPIRATION:消息的过期时间,存储的是从1970-01-01到现在的毫秒数

MSG:消息本体的Java序列化对象的二进制数据

PRIORITY:优先级,从0-9,数值越大优先级越高

activemq_acks用于存储订阅关系。如果是持久化Topic,订阅者和服务器的订阅关系在这个表保存:

主要的数据库字段如下:

CONTAINER:消息的Destination

SUB_DEST:如果是使用Static集群,这个字段会有集群其他系统的信息

CLIENT_ID:每个订阅者都必须有一个唯一的客户端ID用以区分

SUB_NAME:订阅者名称

SELECTOR:选择器,可以选择只消费满足条件的消息。条件可以用自定义属性实现,可支持多属性AND和OR操作

LAST_ACKED_ID:记录消费过的消息的ID。

表activemq_lock在集群环境中才有用,只有一个Broker可以获得消息,称为Master Broker,

其他的只能作为备份等待Master Broker不可用,才可能成为下一个Master Broker。

这个表用于记录哪个Broker是当前的Master Broker。

启动生产者生产一条消息

public static void main(String[] args) throwsJMSException {//创建MQ连接工厂

ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER, ActiveMQConnectionFactory.DEFAULT_PASSWORD, "tcp://127.0.0.1:61616");//创建连接

Connection connection =activeMQConnectionFactory.createConnection();//启动连接

connection.start();//创建会话工厂

Session session =connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);//创建队列

Queue queue = session.createQueue("wdksoft_queue");//创建消息生产者

MessageProducer producer =session.createProducer(queue);//消息持久化

producer.setDeliveryMode(2);//模拟消息

TextMessage message = session.createTextMessage("hello activeMQ");//发送消息

producer.send(message);

System.out.println("生产者发送消息完毕~");

session.close();

connection.close();

}

刷新msgs数据表

36b1135fa9930bcbda2f25483ed73929.png

数据表中就多了一条刚才的信息

当启动消费者消费了这条信息时,数据库便不再保存这条记录

public static void main(String[] args) throwsJMSException {//ConnectionFactory :连接工厂,JMS 用它创建连接

ConnectionFactory connectionFactory = newActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,

ActiveMQConnection.DEFAULT_PASSWORD,"tcp://127.0.0.1:61616");//JMS 客户端到JMS Provider 的连接

Connection connection =connectionFactory.createConnection();

connection.start();//Session: 一个发送或接收消息的线程

Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);//Destination :消息的目的地;消息发送给谁.

Destination destination = session.createQueue("wdksoft_queue");//消费者,消息接收者

MessageConsumer consumer =session.createConsumer(destination);while (true) {//监听消息

TextMessage message =(TextMessage) consumer.receive();if (null !=message) {

System.out.println("收到消息:" +message.getText());

}else

break;

}

session.close();

connection.close();

}

385f54c11066cd78509031a63eecd446.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值