activemq基礎操作
github網址:https://github.com/Plumblumpb/messageQueue-.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;
}
}