activeMq的点对点发送

本文详细介绍使用ActiveMQ实现消息队列的过程,包括连接工厂创建、连接建立、会话创建、目的地设定、消息生产和消费等关键步骤,并提供完整的发送者与消费者代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1. 建立连接工厂

ConnectionFactory factory = new ActiveMQConnectionFactory("system","manager","tcp://localhost:61616"); 参数1:用户名,默认:ActiveMQConnection.DEFAULT_USER=null;可以根据mq的配置文件自己设置 参数2:密码,默认:ActiveMQConnection.DEFAULT_PASSWORD=null;可以根据mq的配置文件自己设置 参数3:url,默认:ActiveMQConnection.DEFAULT_BROKER_URL=failover://tcp://localhost:61616; url有几种:

1. TCP:

			MQ默认使用的协议,开放性、高效性、可靠性是其主要特点,这个协议可满足一般应用的大部分需求,因此在项目中还是比较常用的。
			<transportConnector name="nio" uri="nio:localhost:61618" />  

2. NIO:

			网络消息的传播效率非常的高。因此,当系统存在高用户量、高并发或网络堵塞时,可考虑用此协议。

3. SSL:

			安全套接层协议
			在MQ目录/conf/activemq.xml文件中修改以下配置Xml代码:
				<sslContext>   
					<sslContext keyStore="file:${activemq.base}/conf/broker.ks" keyStorePassword="password"/>   
				</sslContext>  
				<transportConnectors>  
					<transportConnector name="ssl" uri="ssl://localhost:61617"/>  
				</transportConnectors>  

2. 建立连接

Connection conn = factory.createConnection();

3. 获取session

Session session = conn.createSession(true, Session.AUTO_ACKNOWLEDGE); 参数1:是否自动提交 参数2:Session.AUTO_ACKNOWLEDGE, Session.CLIENT_ACKNOWLEDGE, Session.DUPS_OK_ACKNOWLEDGE

4. 建立Destination

Destination destination = session.createQueue("queue");

5. 建立MessageProducer

MessageProducer producer = session.createProducer(destination);

6. 产生消息并发送:

ObjectMessage om = session.createObjectMessage(d); producer.send(om);

7. 建立消费者

MessageConsumer consumer = session2.createConsumer(destination2);

8. 注册监听器

consumer.setMessageListener(new MyListener());
发送者完整代码:
<pre name="code" class="java">public class MqSender {
	
		private static String JMS_USER_NAME = ActiveMQConnection.DEFAULT_USER;
		private static String JMS_PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
		private static String JMS_URL = ActiveMQConnection.DEFAULT_BROKER_URL;
		
		public void send(){
			Connection conn = null;
			try{
				ConnectionFactory factory = new ActiveMQConnectionFactory("system","manager","tcp://localhost:61616");
				conn = factory.createConnection();
				conn.start();
				
				Session session = conn.createSession(true, Session.AUTO_ACKNOWLEDGE);
				Destination destination = session.createQueue("queue");
				MessageProducer producer = session.createProducer(destination);
				
				for(int i=0; i<10; i++){
					Data d = new Data("data"+i);
					ObjectMessage om = session.createObjectMessage(d);
					producer.send(om);
					System.out.println("producer向"+producer.getDestination()+"发送了消息:"+d);
					Thread.sleep(3000);
					session.commit();
				}	
			}catch(Exception e){
				
			}finally{
				if(conn != null){
					try {
						conn.close();
					} catch (JMSException e1) {
						e1.printStackTrace();
					}
				}
			}
			
		}
		
		public static void main(String[] args) {
			MqSender sender = new MqSender();
			try {
				sender.send();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}



消费者完整代码:

 
<pre name="code" class="java">public class Receiver {
		private static String JMS_USER_NAME = ActiveMQConnection.DEFAULT_USER;
		private static String JMS_PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
		private static String JMS_URL = ActiveMQConnection.DEFAULT_BROKER_URL;
		public void receive(){
			Connection conn = null;
			try{
				ConnectionFactory factory = new ActiveMQConnectionFactory(JMS_USER_NAME,JMS_PASSWORD,JMS_URL);
				conn = factory.createConnection();
				conn.start();
				
				Session session2 = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
				Destination destination2 = session2.createQueue("queue");
				MessageConsumer consumer = session2.createConsumer(destination2);
				consumer.setMessageListener(new MyListener1());
			}catch(Exception e){
				
			}finally{
				if(conn != null){
					try {
						conn.close();
					} catch (JMSException e1) {
						e1.printStackTrace();
					}
				}
			}
			
		}
		public static void main(String[] args) {
			Receiver re = new Receiver();
			try {
				re.receive();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	class MyListener1 implements MessageListener{

		@Override
		public void onMessage(Message msg) {
			try {
				Data d = (Data) ((ObjectMessage)msg).getObject();
				System.out.println("rec1:"+d);
				Thread.sleep(500);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值