java实现消息队列的两种方式(小结)

java实现消息队列的两种方式(小结)本文主要介绍了两种java实现消息队列的方式,利用Spring消息模板发送消息和Apache ActiveMQ官方实例发送消息,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来…

实现消息队列的两种方式

Apache ActiveMQ官方实例发送消息

直接在Apache官网http://activemq.apache.org/download-archives.html下载ActiveMQ源码

下载解压后拿到java代码实例

java实现消息队列的两种方式(小结) 

然后倒入IDE

如下:

java实现消息队列的两种方式(小结) 

请认真阅读readme.md文件,大致意思就是把项目打成两个jar包,然后启动服务,然后同时运行打的两个jar包,然后就能看到具体的调用信息。打jar包时直接利用maven打就行了,不用修改代码。

启动服务:

java实现消息队列的两种方式(小结) 

java实现消息队列的两种方式(小结)

利用Spring消息模板发送消息

Spirng对Apache ActiveMQ提供了很好的支持

java实现消息队列的两种方式(小结) 

生成者代码:

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;

/**
 * 发送消息
 */
@Service
public class ProducerServiceImpl implements ProducerService {

 @Resource
 private JmsTemplate jmsTemplate;

 public void sendMessage(Destination destination, String msg) {
  System.out.println("向队列"+destination+"发送消息");
  jmsTemplate.convertAndSend(destination,msg);
 }

 public void sendMessage(String msg) {
  System.out.println("向队列"+jmsTemplate.getDefaultDestination().toString()+"发送消息");
  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">
  <!-- 设置消息队列的名字 -->
  <constructor-arg>
   <value>queue1</value>
  </constructor-arg>
 </bean>

 <!-- 配置JMS模板(Queue),Spring提供的JMS工具类,它发送、接收消息。 -->
 <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);
 }
}

测试结果

java实现消息队列的两种方式(小结) 

代码地址

https://github.com/wahnn/SpringJMS
https://gitee.com/wahnn/SpringJMS

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

激活谷谷主为您准备了激活教程,为节约您的时间请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/5300.html

(0)
上一篇 2024年 3月 13日 上午8:02
下一篇 2024年 3月 14日 上午8:02

相关推荐

  • vmware15.5最新密钥_VMware15密钥是什么

    vmware15.5最新密钥_VMware15密钥是什么手把手教你安装VMware workstation虚拟机(最新版本15.5)本文重点内容:1、什么是VMware workstation?2、软件下载3、软件安装4、相关文章延伸参考:如何在虚拟机上安装kali l

    2024年 5月 16日
  • pycharm怎么读取excel数据_python处理excel数据

    pycharm怎么读取excel数据_python处理excel数据利用Python对Excel数据进行处理通过本文,记录分享我利用Python对已存在的excel表格进行数据处理。 因为是没学可视化之前做的,所以都展示在后台上。 1. 功能分析 1.1加载文件夹内所有的Excel数据; 1

    2024年 5月 17日
  • 串口调试助手搜不到串口_串口调试助手搜不到串口怎么办

    串口调试助手搜不到串口_串口调试助手搜不到串口怎么办如何使用串口调试助手(调试串口)?SerialPortTool概述1 SerialPortTool简介SerialPortTool是一款通用的串口调试工具,基于QT框架开发,可以运行在Windows、Linux和MacOS平台下,具备良好的跨平台能力。SerialPortTool串口调试工具无

    2024年 5月 24日
  • 哈夫曼编码c语言代码_哈夫曼编码c语言代码桟

    哈夫曼编码c语言代码_哈夫曼编码c语言代码桟自学考试:数据结构导论课件.pdf第一章概论第零节概论简单地说,数据结构是计算机组织数据和存储数据的方式。更进一步地说,数据结构是指一组相互之间存在一种或多种特定关系的数据的组织方式和它们在计算机内的存储方式,以及定义在该组数据上的

    激活谷笔记 2024年 5月 29日
  • word方框中打√符号_Word表格中小方块√怎么打

    word方框中打√符号_Word表格中小方块√怎么打5种方法,在Word里输入打√方框□!相信很多人都遇到过,公司、学校下发的表格里,出现下面这种勾选题:□是 □否如果是纸质版表格,还可以在方框□里手动打√。但如果是电子版,怎么才能输入打√的方

    2024年 5月 12日
  • 蓝牙开发教程api

    蓝牙开发教程api使用mpvue 开发小程序过程中 简单介绍一下微信小程序蓝牙连接过程在蓝牙连接的过程中部分api需要加定时器延时1秒到2秒左右再执行,原因为何不知道,小程序有这样的要求1.首先是要初始化蓝牙:openBluetoothAdapter()if

    激活谷笔记 2024年 5月 19日
  • html查看器打开空白_html查看器可以删除吗

    html查看器打开空白_html查看器可以删除吗浅谈原型图工具选择【摘要】原型图作为设计稿的前身,决定着整个项目的雏形和大方向。趁手的原型图绘制工具,可以让我们事半功倍,面对市面上琳琅满目的原型图工具,应该如何选择呢?这篇文章将与大家聊一聊两款常见的原型图工具。【作者】白金原型图工具分类原型图工具按照其呈现形式,可以大致分为客户端版本及网

    2024年 5月 16日
  • linux操作系统安装步骤及图解大全

    linux操作系统安装步骤及图解大全这篇教程中,我们将图解 Rocky Linux 9 安装步骤。Rocky 企业软件基金会Rocky Enterprise Software Foundation 已经发布了它的最新的操作系统 “Rocky Li

    激活谷笔记 2024年 5月 20日
  • 半导体存储器分为哪两类_半导体存储器分为哪两类类型

    半导体存储器分为哪两类_半导体存储器分为哪两类类型半导体存储器芯片主要有哪几类型?芯片中的二进制是通过晶体管的通断来实现的,因此晶体管的数量也意味着芯片的算力。算力要有用武之地,首先需要有足够的数据,这时候存储芯片就很重要。存储芯片的分类方式有很多种,其中可以根据断电后是否保留存储的信分为易失性存储芯片和非

    2024年 5月 29日
  • is-is协议配置实例_is-is协议详解

    is-is协议配置实例_is-is协议详解声学所提出新型水声网络移动节点接入协议AUV(Autonomous Underwater Vehicle)等可移动的节点可开展大范围的水下探测工作,但其在由固定节点构成的水下传感器网络中进行上行链路传输时

    激活谷笔记 2024年 5月 20日
  • 多线程同步执行的命令_多线程同步执行的命令有哪些

    多线程同步执行的命令_多线程同步执行的命令有哪些2021互联网公司java开发工程师面试题汇总!(附答案)2021年互联网大厂,校园招聘java开发工程师面试题大全!(附答案),本篇文章包含java基础+JVM+JMM面试题。Java 基础 40语言特性 12Q1:Java 语言的优点?Q2:Java 如何实现平台无关?Q3:J

    2024年 5月 21日
  • 二叉搜索树的应用_二叉搜索树的应用场景

    二叉搜索树的应用_二叉搜索树的应用场景随处可见的红黑树详解前言刚开始接触红黑树的时候,感觉很难。其实不然,红黑树只是情况分的多了一点而已,相较于线段树,主席树等等,简单多了。对于红黑树3种插入维护4种删除维护没必要去记忆,稍作了解,对于红黑树的性质和特点

    2024年 5月 30日
关注微信