其他相关文章:
http://wangxinchun.iteye.com/blog/2145998
http://wangxinchun.iteye.com/blog/2145958
activemq 中消费者获取消息有两种方式:
1、通过MessageConsumer.receive(TIMEOUT) 方法拉消息。
2、通过MessageConsumer.setMessageListener(new MessageListener(){}) 监听消息。
上面的文章都是用的第一种拉消息的方式,在项目中,更方便的做法是第二种,通过设置消息监听器监听消息,由mq broker 推消息过来。
下面的代码演示了监听方式的用法:
public class Consumer {
private static final String BROKER_URL = "tcp://localhost:61616";
private static final Boolean NON_TRANSACTED = false;
private static final long TIMEOUT = 20000;
public static void main(String[] args) {
String url = BROKER_URL;
if (args.length > 0) {
url = args[0].trim();
}
System.out.println("\nWaiting to receive messages... will timeout after " + TIMEOUT / 1000 +"s");
//MQ 连接工厂对象
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("admin", "password", url);
Connection connection = null;
try {
//建连接
connection = connectionFactory.createConnection();
connection.start();
//创建会话
Session session = connection.createSession(NON_TRANSACTED, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("test-queue");
MessageConsumer consumer = session.createConsumer(destination);
consumer.setMessageListener(new MessageListener(){
@Override
public void onMessage(Message message) {
if(message instanceof TextMessage){
try {
System.out.println(((TextMessage)message).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
});
System.in.read();
session.close();
} catch (Exception e) {
System.out.println("Caught exception!");
}
finally {
if (connection != null) {
try {
connection.close();
} catch (JMSException e) {
System.out.println("Could not close an open connection...");
}
}
}
}
}
分享到:
相关推荐
<jms:listener destination="myQueue" ref="messageListener" method="onMessage"/> </jms:listener-container> ``` 在这个配置中,我们创建了一个连接工厂、一个JMS模板和一个消息监听器。然后,我们定义了一个...
开发者只需提供一个实现了`MessageListener`接口的类,Spring会自动处理消息的接收和执行监听器的方法。 4. **消息队列和主题的声明**:在Spring配置中,你可以声明消息队列和主题,定义消费者如何订阅它们。例如,...
import javax.jms.MessageListener; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; // ... ``` - 还可以通过Stomp协议使用WebSocket客户端与ActiveMQ交互。 6. **安全...
System.out.println("Received queue message: " + message); } } @Service public class QueueMessageSender { @Autowired private JmsTemplate jmsTemplate; public void sendMessageToQueue(String ...
<bean id="destination" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg value="myQueue"/> <bean id="messageListener" class="com.example.MessageListener"/> <bean id="message...
4. **MessageListener**: 如果需要异步接收消息,可以实现 javax.jms.MessageListener 接口并提供 onMessage 方法。Spring 可以自动将该接口的实现注册为消息监听器。 **注解驱动的实例** 在描述中提到的“注解的...
对于消息的接收,我们需要创建一个MessageListener。在Spring中,我们可以定义一个实现了MessageListener接口的类,并在容器中注册它。使用`@JmsListener`注解,指定监听的Destination,当有新消息到达时,容器会...
3. **消费者代码**:这部分代码通常包含一个实现了`MessageListener`接口的类,当接收到消息时,`onMessage`方法会被调用。`DefaultMessageListenerContainer`会自动管理和启动这个监听器。 4. **测试和示例**:项目...
4. 创建消息消费者:同样,Spring Boot会自动配置一个消息监听容器,我们可以通过实现`MessageListener`接口来创建消息消费者: ```java @Component public class MessageConsumer implements MessageListener { @...
这个类通常会实现`MessageListener`接口,这样可以监听消息队列中的新消息。下面是一个简单的`MessageReceiver`实现示例: ```java import org.springframework.jms.annotation.JmsListener; import org.spring...
4. **定义消息监听器**:通过实现MessageListener接口或使用@JmsListener注解,可以定义一个或多个监听器,当消息到达时,它们会被自动调用。 5. **发送和接收消息**:通过JmsTemplate发送消息,而监听器则负责接收...
return new ActiveMQQueue("MyQueue"); } @Bean public MessageProducer messageProducer(JmsTemplate jmsTemplate, Destination destination) { return new MessageProducer(jmsTemplate, destination); } }...
这包括`ConnectionFactory`、`Destination`(Queue或Topic)、`MessageListenerContainer`等。例如: ```java @Configuration public class JMSConfig { @Value("${activemq.broker.url}") private String ...
<property name="messageListener" ref="messageListener"/> ``` 在代码中,`MessageListenerImpl`需要实现`javax.jms.MessageListener`接口,并覆盖`onMessage`方法,以处理接收到的消息。 通过以上方式,我们...
在同步模式下,`Consumer.receive()`方法会阻塞直到有消息到达,而异步模式下,`MessageListener.onMessage(Message message)`方法会在消息到达时被自动调用。 `jiuqiyuliang-9122251-activeMQHelloWorld_...
- 使用`createSubscriber()`方法创建订阅者,可以通过`MessageListener`监听器实时接收消息。 - 主题适合一对多的广播场景,如新闻推送或交易通知。 3. **Java API使用**: - `ConnectionFactory`:创建与...
生产者可以向`myTopic`发送消息,而多个消费者(如`MessageListener1`和`MessageListener2`)会接收到这些消息。这种模式非常适合广播类型的应用场景,例如通知、事件发布等。 在实际项目中,还需要考虑异常处理、...
- `activemq-consumer.xml`通常包含消息消费者的配置,例如定义MessageListenerContainer,它监听特定的Queue或Topic,并通过实现MessageListener接口处理接收到的消息。 - `activemq-produce.xml`则包含了消息...
其中,`MessageListener`是你自定义的消息监听器,需要实现`javax.jms.MessageListener`接口。 4. 编写消息监听器:在`MessageListener`类中,重写`onMessage`方法来处理接收到的消息。 5. 发送消息:使用`...