版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/c_royi/article/details/86628067
activemq基础操作
github网址:activemq.git
pom.xml文件
<dependencies>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.15.8</version>
</dependency>
</dependencies>
队列模式
生产者
/**
* @Auther: cpb
* @Date: 2018/12/20 10:38
* @Description:
*/
public class Produce {
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
private static final String PASSWORD =ActiveMQConnection.DEFAULT_PASSWORD;
private static final String BROKERURL =ActiveMQConnection.DEFAULT_BROKER_URL;
public static void main(String[] args) {
//1.创建连接工厂
ConnectionFactory connectionFactory;
//2.获取连接
Connection connection;
//3.创建会话
Session session;
//4.创建会话队列
Queue queue;
//5.创建消息生产者
MessageProducer messageProducer;
//6.主题
Destination destination;
try {
connectionFactory = new ActiveMQConnectionFactory(Produce.USERNAME,Produce.PASSWORD,Produce.BROKERURL);
connection = connectionFactory.createConnection();
connection.start();
/*4.获取session (参数1:是否启动事务,
参数2:消息确认模式[
AUTO_ACKNOWLEDGE = 1 自动确认
CLIENT_ACKNOWLEDGE = 2 客户端手动确认
DUPS_OK_ACKNOWLEDGE = 3 自动批量确认
SESSION_TRANSACTED = 0 事务提交并确认
])*/
session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
queue = session.createQueue("firstQueue");
messageProducer = session.createProducer(queue);
for(int i = 0 ; i<10 ; i++){
//7.创建消息
TextMessage textMessage = session.createTextMessage("activeMq发送信息:"+i);
//8.发送消息
messageProducer.send(textMessage);
}
} catch (JMSException e) {
e.printStackTrace();
} finally {
}
}
}
消费者
public class Comsume1 {
public static void main(String[] args) {
try {
//1.创建连接工厂
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");
//2.获取连接
Connection connection = connectionFactory.createConnection();
//3.启动连接
connection.start();
//4.获取session (参数1:是否启动事务,参数2:消息确认模式)
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
//5.创建队列对象
Queue queue = session.createQueue("firstQueue");
//6.创建消息消费者
MessageConsumer consumer = session.createConsumer(queue);
//7.监听消息
consumer.setMessageListener(new MessageListener() {
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println("消费者1接收到消息:"+textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
//8.等待键盘输入
System.in.read();
//9.关闭资源
consumer.close();
session.close();
connection.close();
} catch (JMSException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
}
}
主题模式
生产者
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
/**
* @Auther: cpb
* @Date: 2018/12/20 11:14
* @Description:
*/
public class TopicProducer {
public static void main(String[] args) {
try {
//1.创建连接工厂
ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");
//2.获取连接
Connection connection = connectionFactory.createConnection();
//3.启动连接
connection.start();
/*4.获取session (参数1:是否启动事务,
参数2:消息确认模式)*/
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//5.创建主题对象
Topic topic = session.createTopic("test-JMS2");
//6.创建消息生产者
MessageProducer producer = session.createProducer(topic);
//7.创建消息
for(int i = 0 ;i<10;i++) {
TextMessage textMessage = session.createTextMessage("发送订阅消息"+i);
//8.发送消息
producer.send(textMessage);
System.out.println("发送订阅消息"+i);
}
//9.关闭资源
producer.close();
session.close();
connection.close();
} catch (JMSException e) {
e.printStackTrace();
} finally {
}
}
}
消费者
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
import java.io.IOException;
/**
* @Auther: cpb
* @Date: 08//0 :
* @Description:
*/
public class TopicConsumer1 {
public static void main(String[] args) {
try {
//1.创建连接工厂
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");
//2.获取连接
Connection connection = connectionFactory.createConnection();
//3.启动连接
connection.start();
//4.获取session (参数1:是否启动事务,参数2:消息确认模式)
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
//5.创建主题对象
Topic topic = session.createTopic("test-JMS2");
//6.创建消息消费者
MessageConsumer consumer = session.createConsumer(topic);
//7.监听消息
consumer.setMessageListener(new MessageListener() {
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println("消费1--接收到消息:"+textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
//8.等待键盘输入
System.in.read();
//9.关闭资源
consumer.close();
session.close();
connection.close();
} catch (JMSException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
}
}
整合springboot
pom.xml文件
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
</dependency>
</dependencies>
application.properties配置
spring.activemq.broker-url=failover:tcp://localhost:61616
spring.activemq.in-memory=true
#如果此处设置为true,需要加如下的依赖包,否则会自动配置失败,报JmsMessagingTemplate注入失败
spring.activemq.pool.enabled=false
#是否开启发布订阅
spring.jms.pub-sub-domain=true
生产者
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Component;
import javax.jms.Destination;
/**
* @Auther: cpb
* @Date: 2018/12/20 17:33
* @Description:
*/
@Component("jms2Produce")
public class Produce {
@Autowired
private JmsMessagingTemplate jmsTemplate;
public void sendMessage(String destinationName,String message){
Destination destination = new ActiveMQQueue(destinationName);
//主题模式
//Destination destination = new ActiveMQTopic(destinationName);
jmsTemplate.convertAndSend(destination,message);
}
@JmsListener(destination="out.queue")
public void consumerMessage(String text){
System.out.println("从out.queue队列收到的回复报文为:"+text);
}
}
消费者
import org.springframework.jms.annotation.JmsListener;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Service;
/**
* @Auther: cpb
* @Date: 2018/12/20 17:33
* @Description:
*/
@Service("jms2Consume1")
public class Consume1 {
@JmsListener(destination = "queue2")
@SendTo("out.queue")//返回consume打印信息
public String receiveQueue(String text) {
System.out.println("Consumer1收到的报文为:"+text);
return "return 消息1"+text;
}
}