java實現(xiàn)消息隊列的兩種方式(小結(jié))
實現(xiàn)消息隊列的兩種方式
Apache ActiveMQ官方實例發(fā)送消息
直接在Apache官網(wǎng)http://activemq.apache.org/download-archives.html下載ActiveMQ源碼
下載解壓后拿到j(luò)ava代碼實例
然后倒入IDE
如下:
請認真閱讀readme.md文件,大致意思就是把項目打成兩個jar包,然后啟動服務(wù),然后同時運行打的兩個jar包,然后就能看到具體的調(diào)用信息。打jar包時直接利用maven打就行了,不用修改代碼。
啟動服務(wù):

利用Spring消息模板發(fā)送消息
Spirng對Apache ActiveMQ提供了很好的支持
生成者代碼:
package com.jms.service.impl;
import com.jms.service.ProducerService;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.jms.Destination;
/**
* 發(fā)送消息
*/
@Service
public class ProducerServiceImpl implements ProducerService {
@Resource
private JmsTemplate jmsTemplate;
public void sendMessage(Destination destination, String msg) {
System.out.println("向隊列"+destination+"發(fā)送消息");
jmsTemplate.convertAndSend(destination,msg);
}
public void sendMessage(String msg) {
System.out.println("向隊列"+jmsTemplate.getDefaultDestination().toString()+"發(fā)送消息");
jmsTemplate.convertAndSend(msg);
}
}
消費者代碼:
package com.jms.service.impl;
import com.jms.service.CustomerService;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.TextMessage;
@Service
public class CustomerServiceImpl implements CustomerService {
@Resource
private JmsTemplate jmsTemplate;
/**
* 接收消息
* @param destination
*/
public void receive(Destination destination) {
TextMessage textMessage = (TextMessage) jmsTemplate.receive(destination);
try {
System.out.println("從隊列》"+destination.toString()+"成功獲取消息》"+textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
Spring配置代碼
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd "> <!-- 啟動包掃描功能,以便注冊帶有@Controller、@Service、@repository、@Component等注解的類成為spring的bean --> <context:component-scan base-package="com.jms.service"> </context:component-scan> <!-- 配置根視圖 --> <!--<mvc:view-controller path="/" view-name="index"/>--> <!--啟用注解--> <mvc:annotation-driven /> <!-- 視圖層配置 --> <!--<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">--> <!--<property name="prefix" value="/WEB-INF/view/"/>--> <!--<property name="suffix" value=".jsp"/>--> <!--</bean>--> <!-- 配置JMS連接工廠 --> <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616" /> </bean> <!-- 定義消息隊列(Queue) --> <bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue"> <!-- 設(shè)置消息隊列的名字 --> <constructor-arg> <value>queue1</value> </constructor-arg> </bean> <!-- 配置JMS模板(Queue),Spring提供的JMS工具類,它發(fā)送、接收消息。 --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" ref="connectionFactory" /> <property name="defaultDestination" ref="queueDestination" /> <property name="receiveTimeout" value="10000" /> </bean> </beans>
測試代碼
package com.jsm.test;
import com.jms.service.CustomerService;
import com.jms.service.ProducerService;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import javax.jms.Destination;
/**
* 消息隊列測試類
*/
public class JmsTest {
@Test
public void producerTest(){
ClassPathXmlApplicationContext springContext = new ClassPathXmlApplicationContext(new String[]{"classpath:spring-core.xml"});
ProducerService producerService = (ProducerService)springContext.getBean("producerServiceImpl");
CustomerService customerService = (CustomerService)springContext.getBean("customerServiceImpl");
Destination destination = (Destination)springContext.getBean("queueDestination");
producerService.sendMessage("測試消息隊列");
customerService.receive(destination);
}
}
測試結(jié)果
代碼地址
https://github.com/wahnn/SpringJMS
https://gitee.com/wahnn/SpringJMS
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Maven3.9.9環(huán)境安裝配置的實現(xiàn)步驟
Maven是一個強大的項目管理和構(gòu)建自動化工具,本文主要介紹了Maven3.9.9環(huán)境安裝配置的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-05-05
springboot實現(xiàn)將自定義日志格式存儲到mongodb中
這篇文章主要介紹了springboot實現(xiàn)將自定義日志格式存儲到mongodb中的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
springboot+mybatis plus實現(xiàn)樹形結(jié)構(gòu)查詢
實際開發(fā)過程中經(jīng)常需要查詢節(jié)點樹,根據(jù)指定節(jié)點獲取子節(jié)點列表,本文主要介紹了springboot+mybatis plus實現(xiàn)樹形結(jié)構(gòu)查詢,感興趣的可以了解一下2021-07-07
利用SpringMVC接收復(fù)雜對象和多個文件(前端使用JQuery)
這篇文章主要介紹了利用SpringMVC接收復(fù)雜對象和多個文件(前端使用JQuery),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10

