springboot-25-springboot 集成 ActiveMq
消息的发布有2种形式, 队列式(点对点) 和主题式(pub/sub) 模式, 队列式发布后, 接收者从队列中获取消息后, 消息就会消失, 但任意消费者都可以从队列中接受消息, 消息只能被接受一次
主题式则为接受后消息不消失
JMS 是(java message service) 是 基于JVM代理的规范, ActiveMQ是他的一种实现
、JMS消息基本组件 2.1、ConnectionFactory 创建Connection对象的工厂,针对两种不同的jms消息模型,分别有QueueConnectionFactory和TopicConnectionFactory两种。可以通过JNDI来查找ConnectionFactory对象。 2.2、Destination Destination的意思是消息生产者的消息发送目标或者说消息消费者的消息来源。对于消息生产者来说,它的Destination是某个队列(Queue)或某个主题(Topic);对于消息消费者来说,它的Destination也是某个队列或主题(即消息来源)。 所以,Destination实际上就是两种类型的对象:Queue、Topic可以通过JNDI来查找Destination。 2.3、Connection Connection表示在客户端和JMS系统之间建立的链接(对TCP/IP socket的包装)。Connection可以产生一个或多个Session。跟ConnectionFactory一样,Connection也有两种类型:QueueConnection和TopicConnection。 2.4、Session Session是操作消息的接口。可以通过session创建生产者、消费者、消息等。Session提供了事务的功能。当需要使用session发送/接收多个消息时,可以将这些发送/接收动作放到一个事务中。同样,也分QueueSession和TopicSession。 2.5、消息的生产者 消息生产者由Session创建,并用于将消息发送到Destination。同样,消息生产者分两种类型:QueueSender和TopicPublisher。可以调用消息生产者的方法(send或publish方法)发送消息。 2.6、消息消费者 消息消费者由Session创建,用于接收被发送到Destination的消息。两种类型:QueueReceiver和TopicSubscriber。可分别通过session的createReceiver(Queue)或createSubscriber(Topic)来创建。当然,也可以session的creatDurableSubscriber方法来创建持久化的订阅者。 2.7、MessageListener 消息监听器。如果注册了消息监听器,一旦消息到达,将自动调用监听器的onMessage方法。EJB中的MDB(Message-Driven Bean)就是一种MessageListener。
1, 安装activeMQ
1), linux安装
访问: http://activemq.apache.org/activemq-5111-release.html
2), docker安装
sudo docker run -d -p : -p : cloudesire/activemq
安装成功后, 可访问:

3) 使用springboot的内嵌 activemq
<!--springboot 内嵌 activemq-->
<dependency>
<groupId>org.apacke.activemq</groupId>
<artifactId>activemq-broker</artifactId>
</dependency>
2, 新建springboot项目
1), 添加依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
</dependency>
2), 添加配置:
spring:
activemq:
broker-url: tcp://192.168.50.202:61616
支持的配置有:
activemq:
broker-url: tcp://192.168.50.202:61616
user:
password:
in-memory:
3) 消息发送者:
package com.wenbronk.enterprise.jms.message; import org.springframework.jms.core.MessageCreator; import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session; /**
* 消息创建者
* Created by wenbronk on 2017/6/13.
*/
public class CreateMessage implements MessageCreator{
@Override
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage("测试消息");
}
}
4) 消息接受着:
package com.wenbronk.enterprise.jms.message; import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component; /**
* 消息接受者
* Created by wenbronk on 2017/6/13.
*/
@Component
public class ReceiMessage { /**
* 使用 @JmsListener 指定要监听的域, 有消息发送时就会发送到此域中
* @param message
*/
@JmsListener(destination = "my-destination")
public void receiveMessage(String message) {
System.out.println("接受到的消息是: " + message);
} }
5), 消息发送:
package com.wenbronk.enterprise.jms.config; import com.wenbronk.enterprise.jms.message.CreateMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Component; /**
* 消息发送及目的地定义
* 实现commandLineRunner, 使得程序启动后执行该类的run() 方法
* Created by wenbronk on 2017/6/13.
*/
@Component
public class MessageConfig implements CommandLineRunner { @Autowired
private JmsTemplate jmsTemplate; /**
* 消息域为 my-destination
* 发送者为 createMessage()
* @param args
* @throws Exception
*/
@Override
public void run(String... args) throws Exception {
jmsTemplate.send("my-destination", new CreateMessage());
}
}
如果想自定义使用 topic 或者 queue 模式, 需要自己指定:
MessageConfig
package com.wenbronk.enterprise.jms.config; import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import javax.jms.Queue;
import javax.jms.Topic; /**
* 创建 点对点模式的对象和发布订阅模式的对象
* Created by wenbronk on 2017/6/13.
*/
@Configuration
public class TopicConfig {
@Bean
public Queue queue() {
return new ActiveMQQueue("sample.queue");
} @Bean
public Topic topic() {
return new ActiveMQTopic("sample.topic");
}
}
消息发布者:
package com.wenbronk.enterprise.jms.producer; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import javax.jms.Queue;
import javax.jms.Topic; /**
* 点对点和订阅模式的消息发布
* Created by wenbronk on 2017/6/13.
*/
@Component
@EnableScheduling
public class MessageProducer { @Autowired
private JmsMessagingTemplate jmsMessagingTemplate; @Autowired
private Queue queue; @Autowired
private Topic topic; @Scheduled(fixedDelay=)//每3s执行1次
public void send() {
//send queue.
this.jmsMessagingTemplate.convertAndSend(this.queue, "hi,activeMQ");
//send topic.
this.jmsMessagingTemplate.convertAndSend(this.topic, "hi,activeMQ(topic)");
} }
消息接受者
package com.wenbronk.enterprise.jms.message; import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component; /**
* 点对点和订阅模式的消息接受着
* Created by wenbronk on 2017/6/13.
*/
@Component
public class MessageConsumer { @JmsListener(destination = "sample.topic")
public void receiveQueue(String text) {
System.out.println("Consumer2="+text);
} @JmsListener(destination = "sample.topic")
public void receiveTopic(String text) {
System.out.println("Consumer3="+text);
} }
需要在配置文件中开启 发布订阅模式的支持:
spring:
activemq:
broker-url: tcp://192.168.50.202:61616
jms:
pub-sub-domain: true
springboot-25-springboot 集成 ActiveMq的更多相关文章
- SpringBoot集成ActiveMQ
前面提到了原生API访问ActiveMQ和Spring集成ActiveMQ.今天讲一下SpringBoot集成ActiveMQ.SpringBoot就是为了解决我们的Maven配置烦恼而生,因此使用S ...
- Springboot简单集成ActiveMQ
Springboot简单集成ActiveMQ 消息发送者的实现 pom.xml添加依赖 <dependency> <groupId>org.springframework.bo ...
- SpringBoot12 QueryDSL01之QueryDSL介绍、springBoot项目中集成QueryDSL
1 QueryDSL介绍 1.1 背景 QueryDSL的诞生解决了HQL查询类型安全方面的缺陷:HQL查询的扩展需要用字符串拼接的方式进行,这往往会导致代码的阅读困难:通过字符串对域类型和属性的不安 ...
- SpringBoot(七):集成DataSource 与 Druid监控配置
绑定DataSource:Spring Boot默认的数据源是:org.apache.tomcat.jdbc.pool.DataSource,Druid是Java语言中最好的数据库连接池,并且能够提供 ...
- DEMO: springboot 与 freemarker 集成
直接在 DEMO: springboot 与 mybatis 集成 基础上,进行修改. 1.pom.xml 中引用 依赖 <dependency> <groupId>org.s ...
- Springboot 和 Mybatis集成开发
Springboot 和 Mybatis集成开发 本项目使用的环境: 开发工具:Intellij IDEA 2017.1.3 jdk:1.7.0_79 maven:3.3.9 额外功能 PageHel ...
- 微服务学习三:springboot与springcloud集成之Eurake的使用(server端,client端)
这个多亏了网站上的一个大神的博客: http://blog.csdn.net/forezp/article/details/70148833 强烈推荐学习: 1.springcloud是什么,这个大家 ...
- 在前后端分离的SpringBoot项目中集成Shiro权限框架
参考[1].在前后端分离的SpringBoot项目中集成Shiro权限框架 参考[2]. Springboot + Vue + shiro 实现前后端分离.权限控制 以及跨域的问题也有涉及
- SpringBoot系列之集成jsp模板引擎
目录 1.模板引擎简介 2.环境准备 4.源码原理简介 SpringBoot系列之集成jsp模板引擎 @ 1.模板引擎简介 引用百度百科的模板引擎解释: 模板引擎(这里特指用于Web开发的模板引擎)是 ...
- SpringBoot系列之集成Druid配置数据源监控
SpringBoot系列之集成Druid配置数据源监控 继上一篇博客SpringBoot系列之JDBC数据访问之后,本博客再介绍数据库连接池框架Druid的使用 实验环境准备: Maven Intel ...
随机推荐
- How To Use XDOLoader to Manage, Download and Upload Files? (文档 ID 469585.1)
Applies to: BI Publisher (formerly XML Publisher) - Version 5.6.3 to 5.6.3 [Release 5] Information ...
- Delphi for iOS开发指南(3):创建一个FireMonkey iOS应用程序
http://cache.baiducontent.com/c?m=9d78d513d9d431a94f9d92697d60c015134381132ba1d0020fa48449e3732b4b50 ...
- web api 多版本控制重要的两个类
1.版本路径替换 public class ReplaceVersionWithExactValueInPath : IDocumentFilter { public void ...
- CSS盒子坍塌问题的4种解决方案
一.问题重述 嗯,这个就是坍塌的盒子了.外部盒子本应该包裹住内部的两个浮动盒子,结果却没有. 二.问题出现的原因 3个盒子都只设置了width,而没有规定height,内部两个盒子分别设置了左右浮动. ...
- JS获取用户的Ip地址
在网站中通常需要获取使用者的ip地址,获取抵制的方式有很多,这里就简单介绍一下js获取用户ip地址 /*使用的新浪的ip查询api,根据返回的数据进行判断*/ <script src=" ...
- Javascript/jQuery常用方法
//字符串转成时间 function getDate(strDate) { var date = eval('new Date(' + strDate.replace(/\d+(?=-[^-]+$)/ ...
- qt linux下配置安装
linux版本: qt卸载: 1. 先找到qt的安装位置: 2.然后执行其下面的文件MaintenanceTool: 3. 然后会出现图形界面: 卸载完成. 安装qt 下载地址: https://ww ...
- CRT和EXCRT简单学习笔记
中国剩余定理CRT 中国剩余定理是要求我们解决这样的一类问题: \[\begin{cases}x\equiv a_1\pmod {b_1} \\x\equiv a_2 \pmod{b_2}\\...\ ...
- jzoj5832. 【省选模拟8.20】Emotional Flutter
tj:我們發現,每一次走過的步長都是k,設當前走的步數是x,走到了一個白條 那麼,每一次走就是把所有黑條都向前移k位,我們可以考慮把所有黑條的左邊界不斷的向前移動k,直到下一次移動時,其左邊界小於0, ...
- Mysql的Text和Blob的比较
MySQL存在text和blob: (1)相同 在TEXT或BLOB列的存储或检索过程中,不存在大小写转换,当未运行在严格模式时,如果你为BLOB或TEXT列分配一个超过该列类型的最大长度的值,值被截 ...