activemq
- producer
发送消息,
- 我的生产者的delivery模式设置为persistent;
- 额外加了一个重试机制,创建了一个消费者来做重试处理;
- 生产者端时刻监听消费者返回的消息;
package com.activemq.config;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.jms.*;
import java.util.concurrent.TimeUnit;
/**
* @author ziwen
* @since Jul 12, 2017
*/
@Component
public class PublisherOpenWire {
private static final Boolean NON_TRANSACTED = false;
private static final int NUM_MESSAGES_TO_SEND = 100;
private static final long DELAY = 100;
private static final String BROKER_URL = "tcp://10.10.10.64:61613";
private static String userName = "admin";
private static String passWord = "admin";
private int count=0;
@Scheduled(cron="*/1 * * * * ?")
private void process(){
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(userName, passWord, BROKER_URL);
Connection connection = null;
try {
connectionFactory.setTrustAllPackages(true);
connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(NON_TRANSACTED, Session.CLIENT_ACKNOWLEDGE);
Destination destination = session.createTopic("test-queue");
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
Destination replyDest = session.createTemporaryTopic();
// set up the consumer to handle the reply
MessageConsumer replyConsumer = session.createConsumer(replyDest);
replyConsumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
System.out.println("*** REPLY *** ");
System.out.println("The message received is :" + message.toString());
}
});
ObjectMessage message = session.createObjectMessage(new Email("ziwen", "myMessages"));
message.setJMSReplyTo(replyDest);
producer.send(message);
// wait for a response
TimeUnit.SECONDS.sleep(2);
producer.close();
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...");
}
}
}
}
}
- consumer
消费者端收到消息之后返回给客户端消息提示消息;
package com.activemq.config;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.jms.*;
/**
* @author ziwen
* @since Jul 12, 2017
*/
@Component
public class SubscriberOpenWire {
private static final String BROKER_URL = "tcp://10.10.10.64:61613";
private static String userName = "admin";
private static String passWord = "admin";
private static final Boolean NON_TRANSACTED = false;
private static final long TIMEOUT = 20000000;
@Scheduled(cron="*/1 * * * * ?")
private void process(){
System.out.println("Using connection: " + BROKER_URL);
System.out.println("\n Waiting to receive messages... will timeout after " + TIMEOUT / 1000 + "s");
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(userName, passWord, BROKER_URL);
Connection connection = null;
StringBuffer stringBuffer = new StringBuffer();
try {
connectionFactory.setTrustAllPackages(true);
connection = connectionFactory.createConnection();
connection.start();
final Session session = connection.createSession(NON_TRANSACTED, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createTopic("test-queue");
MessageConsumer consumer = session.createConsumer(destination);
while (true) {
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
if (message instanceof ObjectMessage) {
Email text = null;
int i = 0;
try {
text = (Email) ((ObjectMessage) message).getObject();
System.out.println("Got " + ++i + ". message: " + text.getBody() + "," + text.getTo());
Destination replyTo = message.getJMSReplyTo();
MessageProducer producer = session.createProducer(replyTo);
producer.send(session.createTextMessage("You made it to the consumer, here is your response"));
} catch (JMSException e) {
e.printStackTrace();
}
}
}
});
}
} 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...");
}
}
}
}
}