activeMq的点对点发送

 

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();
			}
		}
	}



                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Kettle ActiveMQ是一种基于开源的消息队列系统,它是Apache软件基金会的项目之一。它是一个灵活、可扩展和高性能的消息中间件,常被用于实现异步通信和解决高并发的消息传递需求。 Kettle ActiveMQ具有以下特点: 1. 可靠性:Kettle ActiveMQ采用了持久化机制,即使在消息传递过程中发生故障,消息也不会丢失。它能够在网络中断或节点宕机后重新连接,并确保消息被可靠地传递。 2. 高性能:Kettle ActiveMQ使用高效的消息传递协议,能够支持高并发、大规模的消息传递。它采用了多线程和异步处理的方式,以提高系统的吞吐量和响应速度。 3. 可扩展性:Kettle ActiveMQ支持水平扩展和集群部署,可以根据业务需求动态增加消息队列的节点数量,以满足高负载的需求。它还支持多种通信协议,包括TCP、HTTP和WebSocket等,以便与各种应用和系统进行集成。 4. 管理和监控:Kettle ActiveMQ提供了一套完善的管理和监控工具,可以方便地对消息队列进行配置、监控和管理。它提供了Web界面和命令行工具,可以实时查看队列状态、消息流量和性能指标等。 5. 可靠性传输:Kettle ActiveMQ支持各种消息传递模式,包括点对点和发布订阅模式。它提供了消息过滤、事务管理和消息转发等功能,可以确保消息的可靠传输和按需消费。 总之,Kettle ActiveMQ是一个功能强大、易用且可靠的消息队列系统,它广泛应用于企业级应用开发、大数据处理、分布式系统以及互联网应用等领域,为应用程序之间的通信提供了高效、可靠和可扩展的解决方案。 ### 回答2: Kettle是一种开源的ETL工具,用于数据的抽取、转换和加载。而ActiveMQ是一种开源的消息中间件,用于实现消息的传递和异步通信。这两个工具在数据处理和通信方面具有不同的功能。 Kettle可以通过其强大的转换功能,从不同的数据源中提取数据,并进行各种数据处理操作,例如清洗、聚合、转换等。通过Kettle,可以将不同格式的数据整合到一起,为后续的数据分析和业务处理提供了方便。 ActiveMQ则专注于解决分布式系统中的消息通信问题。当系统中的不同模块需要进行异步通信时,ActiveMQ可以提供可靠且快速的消息传递机制。它支持多种通信协议,如AMQP、STOMP等,也提供了丰富的特性,如消息队列、发布-订阅模式等。 结合Kettle和ActiveMQ可以实现更强大的数据处理和通信功能。例如,可以使用Kettle从各个数据源中获取数据,然后将数据通过ActiveMQ发送到目标系统进行处理。这样可以实现异步处理,提高系统的响应速度和可伸缩性。 另外,Kettle也提供了与ActiveMQ的集成插件,可以直接在Kettle中配置和管理ActiveMQ,方便用户进行数据传输和消息通信的配置和管理。 总之,Kettle和ActiveMQ分别在数据处理和通信方面发挥了不可替代的作用。它们的结合可以实现更加灵活、高效的数据处理和通信机制,为企业的数据处理和系统集成提供了有力的支持。 ### 回答3: Kettle是一个开源的ETL工具,用于数据抽取、转换和加载。而ActiveMQ是一个基于Java消息传递中间件的解决方案。 在Kettle中使用ActiveMQ,可以实现数据流的异步处理和消息的发布与订阅。Kettle通过ActiveMQ的队列(Queue)和主题(Topic)机制,实现数据的可靠传输和实时处理。 在数据抽取方面,Kettle可以通过ActiveMQ的消息队列,异步地抽取源数据,并以消息的方式传递到目标端,实现异步数据处理。这样可以提高数据的处理效率,同时减少数据传输的延迟。 在数据转换方面,Kettle可以将数据转换成消息,通过ActiveMQ的队列发送出去。接收者可以异步地处理这些消息,并将处理结果返回给Kettle。这样可以实现分布式数据转换和处理,提高系统的并发能力和可扩展性。 在数据加载方面,Kettle可以通过ActiveMQ的主题机制,将数据以消息的形式发布到订阅者。订阅者可以按需订阅感兴趣的数据,并进行加载和处理。这样可以实现实时数据加载和更新,支持复杂的数据流处理需求。 总之,Kettle和ActiveMQ的结合,可以实现ETL流程的高效处理和实时数据交互。这种解决方案在大数据处理和实时数据分析等场景中具有广泛的应用前景。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值