activemq为生产者、消费者设置连接密码以及消费者消息的签收方式

使用java连接activemq的时候,我们默认的使用的都是默认用户密码和链接地址:

 ConnectionFactory factory=new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
                ActiveMQConnection.DEFAULT_PASSWORD, ActiveMQConnection.DEFAULT_BROKER_URL);

这样是不安全的,如何为activemq的生产者、消费者设置连接用户名和密码呢?

修改activemq.xml配置,需要新增一个插件,在<broker>节点里面添加如下内容:

<plugins>
	<simpleAuthenticationPlugin>
			<users>
					<authenticationUser username="XXXXX" password="XXXXX" groups="users,admins"/>
			</users>
	</simpleAuthenticationPlugin>
</plugins>

连接的时候使用下面的方式就行了:

ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("XXXXX","XXXXX",BROKER_URL);
//第一个参数为用户名,第二个参数为密码

在activemq的生产者一端有下面的代码,是我们最常使用的:

 Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);

这里的两个参数,第一个代表的是是否使用事务,如果设置为true,则我们需要在最后设置session.commit()方法,不然你的消息并不会发送到队列里面去。另外一个Session.AUTO_ACKNOWLEDGE表示消费者收到了消息后自动的给activemq发送收到消息的回执,ac即accept,knowledge这里译为消息的意思,这两个参数都是针对生产者来设置的,对于消费者的代码没有强制的要求,设置了也不起作用,但是为了代码的同一,还是建议保持一致。

另外,还有Session.CLIENT_ACKNOWLEDGE,这里就表示需要消费者一端的代码主动/手工去调用签收消息的方法来确认消息的签收了,假设原先使用Session.AUTO_ACKNOWLEDGE时你是这样接受消息的:

 while(true){
                TextMessage message = (TextMessage)consumer.receive();//receive(100000)每100s接受一次
             System.out.println("接收到了消息:"+message.getText()+"第"+count+"次");
             count++;
    }

此时就需要改为:

 while(true){
                TextMessage message = (TextMessage)consumer.receive();//receive(100000)每100s接受一次
             System.out.println("接收到了消息:"+message.getText()+"第"+count+"次");
             count++;
             message.acknowledeg();
    }

即需要调用message.acknowledeg();来确认消息的签收,不然,activemq并不会记录该消息被消费了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值