activeMQ入门+spring boot整合activeMQ

最近想要学习MOM(消息中间件:Message Oriented Middleware),就从比较基础的activeMQ学起,rabbitMQ、zeroMQ、rocketMQ、Kafka等后续再去学习。

上面说activeMQ是一种消息中间件,可是为什么要使用activeMQ?

在没有使用JMS的时候,很多应用会出现同步通信(客户端发起请求后需要等待服务端返回结果才能继续执行)、客户端服务端耦合、单一点对点(P2P)通信的问题,JMS可以通过面向消息中间件的方式很好的解决了上面的问题。

JMS规范术语:

Provider/MessageProvider:生产者

Consumer/MessageConsumer:消费者

消息形式: 
1、点对点(queue) 
2、一对多(topic)

ConnectionFactory:连接工厂,JMS用它创建连接

Connnection:JMS Client到JMS Provider的连接

Destination:消息目的地,由Session创建

Session:会话,由Connection创建,实质上就是发送、接受消息的一个线程,因此生产者、消费者都是Session创建的

我这里安装的是Windows版本的,安装好了之后就是这样的目录

到bin目录下,启动activemq.bat

这样就启动成功了。

访问http://localhost:8161/admin/index.jsp可以看到管控台,如下图:

spring boot整合activeMQ:

pom.xml中引用

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-pool</artifactId>
            <!-- <version>5.7.0</version> -->
        </dependency>

在application.properties中配置activeMQ连接:

spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.in-memory=true
spring.activemq.pool.enabled=false

创建消息生产者:

/**
 * @author huangzhang
 * @description
 * @date Created in 2018/7/16 18:57
 */
@Service("provider")
public class Provider {
    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;

    public void sendMessage(Destination destination, final String message){
        jmsMessagingTemplate.convertAndSend(destination,message);

    }  //消费消费者返回的队列"return.queue"中的消息
    @JmsListener(destination="return.queue")
    public void consumerMessage(String string){
        System.out.println("从return.queue队列收到的回复报文为:"+string);
    }

}

创建第一个消费者:

/**
 * @author huangzhang
 * @description
 * @date Created in 2018/7/16 19:31
 */
@Component
public class Consumer {
    @JmsListener(destination = "mytest.queue")
    public void receiveQueue(String text){
        System.out.println("Consumer收到的报文为:"+text);
    }
}

创建第二个消费者(这里不光消费了生产者插入队列中的message,而且将返回值插入到了"return.queue"队列中):

/**
 * @author huangzhang
 * @description
 * @date Created in 2018/7/16 19:33
 */
@Component
public class Consumer1 {
    @JmsListener(destination = "mytest.queue")
    @SendTo("return.queue")
    public String receiveQueue(String message){
        System.out.println("Consumer1收到的报文为:"+message);
        return "========return message "+message;
    }
}

测试方法:

@Service
public class SpringbootJmsApplicationTests {
    @Autowired
    private Provider provider;

    public void contextLoads() throws InterruptedException {
        Destination destination = new ActiveMQQueue("mytest.queue");
        for(int i=0; i<10; i++){
            provider.sendMessage(destination, "huangzhang "+i);
        }
    }

}

这里我在controller中调用了测试方法:

/**
 * @author huangzhang
 * @description
 * @date Created in 2018/7/16 20:23
 */
@Controller
public class Test {
    @Autowired
    SpringbootJmsApplicationTests springbootJmsApplicationTests;
    @RequestMapping("/")
    @ResponseBody
    public String test01()throws Exception{

        springbootJmsApplicationTests.contextLoads();

        return "success!";
    }
}

访问http://localhost:8080/对此demo进行测试

这里是执行结果,可以看出,两个消费者分别消费了生产者放入消息队列中的消息,并且Consumer1消费者将返回结果放入了队列中供生产者消费。

查看Queues

这里可以看出我们生产者循环往mytest.queue队列中写入10次,由两个消费者消费了这10次消息

consumer1消费了5次消息,并往返回队列return.queue中写入5次,由原生产者消费了者5次消息

到这里一个简单的spring boot整合activeMQ的demo就完成了(请多指正)。

原文地址:https://www.cnblogs.com/huangzhang/p/9327718.html

时间: 2024-10-23 04:10:22

activeMQ入门+spring boot整合activeMQ的相关文章

spring boot整合activeMQ

spring boot整合activeMQ spring boot整合MQ以后,对于消息的发送和接收操作更加便捷.本文将通过四个案例,分别讲解spring boot整合MQ: spring boot整合MQ发送queue消息 spring boot整合MQ发送topic消息 spring boot整合MQ以后如何让queue和topic消息共存 spring boot整合MQ以后topic消息如何持久化 下面分别进行讲解: 一. spring boot 整合MQ发送queue消息 搭建测试工程,

Spring Boot 整合 ActiveMQ

依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> </dependency> <!--消息队列连接池--> <dependency> <groupId>org.apache.activemq</groupId>

Spring Boot入门 and Spring Boot与ActiveMQ整合

1.Spring Boot入门 1.1什么是Spring Boot Spring 诞生时是 Java 企业版(Java Enterprise Edition,JEE,也称 J2EE)的轻量级代替品.无需开发重量级的 Enterprise JavaBean(EJB),Spring 为企业级Java 开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java 对象(Plain Old Java Object,POJO)实现了 EJB 的功能. 虽然 Spring 的组件代码是轻量级的

Spring Boot 整合模板引擎 Freemaker、thymeleaf

1.常用的 Spring Boot 2.x 模板引擎和官方推荐案例 1)JSP(后端渲染,消耗性能) Java Server Pages 动态网页技术,由应用服务器中的 JSP 引擎来编译和执行,再将生成的整个页面返回给客户端.优点是:可以写java代码.支持表达式语言(el.jstl).内建函数. 但 JSP 本质上是 Servlet,它非常占用 JVM 内存.Java Web 官方推荐,但 Spring Boot 不推荐https://docs.spring.io/spring-boot/d

spring boot 整合 quartz 集群环境 实现 动态定时任务配置【原】

最近做了一个spring boot 整合 quartz  实现 动态定时任务配置,在集群环境下运行的 任务.能够对定时任务,动态的进行增删改查,界面效果图如下: 1. 在项目中引入jar 2. 将需要的表导入数据库 官网上有不同数据库的脚本,找到对应的,导入即可 3. java 代码 将quartz 的相关配置文件,配置为暴露bean,方便后期引用. 有一处关键的地方,就是注入spring 上下文,也可以算是一个坑.如果,不注入spring 上下文,那么新添加的定时任务job,是新new 的一个

spring boot 整合spring Data JPA+Spring Security+Thymeleaf框架(上)

最近上班太忙所以耽搁了给大家分享实战springboot 框架的使用. 下面是spring boot 整合多个框架的使用. 首先是准备工作要做好. 第一  导入框架所需的包,我们用的事maven 进行对包的管理. 以上的举例是本人的H5DS的真实的后台管理项目,这个项目正在盛情融资中,各位多多捧点人场.关注一下软件发展的动态,说不定以后就是您的生活不可或缺的软件哟. 点击打开链接.闲话少说.现在切入正题. 第二,写点配置文件 第三,spring data -设计一个简单的po关系,这里需要下载一

spring boot整合jsp的那些坑(spring boot 学习笔记之三)

Spring Boot 整合 Jsp 步骤: 1.新建一个spring boot项目 2.修改pom文件 <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <depend

Spring boot整合jsp

这几天在集中学习Spring boot+Shiro框架,因为之前view层用jsp比较多,所以想在spring boot中配置jsp,但是spring boot官方不推荐使用jsp,因为jsp相对于一些模板引擎,性能都比较低,官方推荐使用thymeleaf,但是Spring boot整合jsp的过程已经完成,在这里记录一下. 这篇博文是在LZ上篇文章spring boot+mybatis整合基础上写的,开发工具仍然是Intellij idea.这篇文章的重点是Intellij idea的设置,否

企业分布式微服务云SpringCloud SpringBoot mybatis (十三)Spring Boot整合MyBatis

Spring中整合MyBatis就不多说了,最近大量使用Spring Boot,因此整理一下Spring Boot中整合MyBatis的步骤.搜了一下Spring Boot整合MyBatis的文章,方法都比较老,比较繁琐.查了一下文档,实际已经支持较为简单的整合与使用.下面就来详细介绍如何在Spring Boot中整合MyBatis,并通过注解方式实现映射. 整合MyBatis 新建Spring Boot项目,或以Chapter1为基础来操作 pom.xml中引入依赖 这里用到spring-bo