手把手教你如何玩转消息中间件(ActiveMQ)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Cs_hnu_scw/article/details/81040834 </div>
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-cd6c485e8b.css">
<div id="content_views" class="markdown_views">
<!-- flowchart 箭头图标 勿删 -->
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
</svg>
<h1 id="情景引入"><a name="t0"></a>情景引入</h1>
小白:起床起床起床起床。。。。快起床~
我:怎么了又,大惊小怪,吓到我了。
小白:我有事有事想找你,十万火急呢~~
我:你能有什么事?反正我不信。。那你说说看~~
小白:就是我有两个小表弟,叫大白和二白,他们现在每天睡觉之前都要分别和我聊天,让我给他们讲故事,如果不讲他们就不睡觉。但是,如果一个个的跟他们轮流来说的话,我就需要每天说两遍,而且我还要找准他们的时间点,这个有时候我有事情都无法实现这个问题,他们就会很生气。。。
我:这不是挺好的嘛,小孩子就是爱听故事的呀。。。
小白:我也愿意讲,但是时间这个不是很好控制,有没有类似,比如我可以之前就描述好了,然后定点给他们两个一起发消息,而可以抛开时间和其他因素的影响呢?
我:这个嘛,很简单呀,你可以让他们关注你的一个公众号,这样你再定时的推送给他们故事不就可以了嘛。。或者,你可以拉他们进你的一个群这样,就方便了呀~
小白:这样是可以,但是如果以后还有小表妹要听我讲,我就要如此反复的做。。感谢好麻烦好麻烦。。。
我:emmm,我理解你的意思,你就想实现一种很多人都能够进行类似一种消息推送的方式嘛。。。
小白:对的对的。。就是这样一种,,,我记得我们在技术方面好像也有一种类似的技术,这个叫做什么去了呢?
我:这就是消息中间件,一种生产者和消费者的关系。
小白:我也想学我也想学,,你快给我讲讲,给我讲讲呗。。
我:真拿你没办法,好吧。。。下面我就给你讲一下这方面的知识。
情景分析
其实,小白的这个问题,是一种比较普遍的问题。既然我们作为技术人员,当然我们就要从技术成分去分析如何解决了。这里面其实就是包含着一种消息中间件的技术。它也是最近技术层面用得非常非常多的,这也是非常值得我们进行学习。。这在如今的秒杀系统,推荐系统等等,都有广泛的应用。。所以,这章我就主要来跟大家说说这方面的知识。
基本概念的引导
本模块主要讲解关于消息中间件的相关基础知识,也是方便我们后面的学习。
什么是中间件?
非操作系统软件,非业务应用软件,不是直接给最终用户使用,不能直接给用户带来价值的软件,我们就可以称为中间件(比如Dubbo,Tomcat,Jetty,Jboss都是属于的)。
什么是消息中间件?
百度百科解释:消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。
关键点:关注于数据的发送和接受,利用高效可靠的异步消息机制传递机制集成分布式系统。
先简单的用下面这个图说明:
为什么要使用消息中间件
举几个例子,我想你就会明白了。(其实使用消息中间件主要就是为了解耦合和异步两个作用)
1:微博,都用过吧。那么,当我们新关注一个用户,那么系统会相应的推送消息给我们,并且还做了很多关于我们关注的处理。这就是消息中间件的异步。
2:秒杀系统。100件商品,几十万个人在抢,那这个怎么弄呢?总不能就把服务器给宕机了吧。那么就可以把用户的请求进行缓存,然后再异步处理。
3:系统A给系统B进行通信,而系统B需要对A的消息进行相应处理之后才能给A反馈,这时候,总不能让A就傻傻等着吧。那么,这就是异步的功能。
什么是JMS?
Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。
总结起来说就是:Java对于应用程序之间进行信息交互的API(而且是异步)。
里面有下面的概念需要理解,对后续有帮助:
- 提供者:实现JMS的消息服务中间件服务器。
- 客户端:发送或接受消息的应用。
- 生产者/发布者:创建并发送消息的客户端。
- 消费者/订阅者:接受并处理消息的客户端。
- 消息:应用程序之间传递的数据。
- 消息模式:在客户端之间传递消息的模式,JMS主要是队列模式和主体模式。
- 队列模式特点:
(1)客户端包括生产者和消费者。
(2)队列中的一个消息只能被一个消费者使用。
(3)消费者可以随时取消息。 - 主体模式特点:
(1)客户端包括发布者和订阅者。
(2)主题中的消息可以被所有订阅者消费。
(3)消费者不能消费订阅之前发送的消息。
什么是AMQP?
AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。
简单点说:就是对于消息中间件所接受的消息传输层的协议(不懂传输层,那么就需要多看看计算机网络相关知识了,OSI的层次划分),只有这样才能保证客户端和消息中间件能够进行交互(换位思考:HTTP和HTTPS甚至说是TCP/IP与UDP协议都要的道理)。
emmm,比较一下JMS和AMQP的不同吧。。
- JMS是定义与Java,而AMQP是一种传输层协议。
- JMS是属于Java的API,而AMQP是跨语言的。
- JMS消息类型只有两种(主题和队列,后续会说),而AMQP是有五种。
- JMS主要就是针对Java的开发的Client,而AMQP是面向消息,队列,路由。
什么是ActiveMQ呢?
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。
简单点说:不就是为了实现我上述所想要的需求嘛。然后它就是一种实现的方式。就比如,Tomcat是什么?不就是为了实现一种client与服务器之间的交互的一种产品嘛。。所以,不需要死记概念,自己理解就好。
ActiveMQ的安装
环境:Windows
步骤:
(1)登录到ActiveMQ的官网,下载安装包。http://activemq.apache.org/activemq-5154-release.html
(2)下载Zip文件
(3)解压Zip文件,目录如下
(4)启动ActiveMQ服务(注意:要右键以管理员身份进行运行)
注意:有两种方式,第一种就是类似tomcat启动,那么启动图会一直显示。
而第二种的话,就是把这个ActiveMQ注册到服务列表中,这样更方便我们进行操作。(推荐使用这种)
(5)登录,验证是否启动成功
(6)进入管理页面
OK,进入之后就可以看我们的管理页面啦。。。是不是很简单呢?
环境:Linux
步骤:(多余的我就不多说了。。。请看windows的步骤)
(1)同样需要下载对应的文件。后缀为tar.gz的这样的。其实可以直接通过下面的这个命令下载,快速一点,免得要移动到Linux(注意:如果是通过ssh连接的方式的话)。
wget https://mirrors.tuna.tsinghua.edu.cn/apache//activemq/5.15.4/apache-activemq-5.15.4-bin.tar.gz
- 1
(2)然后解压下载的文件
(3)同样进入相对应的目录,运行
./activemq start
- 1
(4)然后再访问相同的地址就可以看到啦。(具体看windows安装步骤)
ActiveMQ的使用(基于Maven)
首先要再回头看看JMS中的一些关键接口。
- ConnectionFactory:用于创建连接到消息中间件的连接工厂。
- Connection:代表了应用程序和服务之间的连接通路。
- Destination:指消息发布的地点,包括队列模式和主体模式。
- Session:表示一个单线程的上下文,用于发送和接受消息。
- MessageConsumer:由会话创建,用于接受发送到目的的消息。
- MessageProducer:由会话创建,用于发送消息。
- Message:是在消费者和生产者之间传递的对象,消息头,一组消息属性,和一个消息体。
环境:IDEA
步骤:
- 使用IDEA创建一个Maven项目,最简单的骨架即可(quick)
- 导入ActiveMq的依赖
<!--添加activemq的依赖-->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.9.0</version>
</dependency>
- 1
- 2
- 3
- 4
- 5
- 6
情形一:队列模型的消息
- 编写生产者代码(使用队列模型的消息)
package com.hnu.scw.queue;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
/**
* @ Author :scw
* @ Date :Created in 上午 11:06 2018/7/14 0014
* @ Description:用于消息的创建类
* @ Modified By:
* @Version: $version$
*/
public class MessageProducer {
//定义ActivMQ的连接地址
private static final String ACTIVEMQ_URL = "tcp://127.0.0.1:61616";
//定义发送消息的队列名称
private static final String QUEUE_NAME = "MyMessage";
public static void main(String[] args) throws JMSException {
//创建连接工厂
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
//创建连接
Connection connection = activeMQConnectionFactory.createConnection();
//打开连接
connection.start();
//创建会话
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//创建队列目标
Destination destination = session.createQueue(QUEUE_NAME);
//创建一个生产者
javax.jms.MessageProducer producer = session.createProducer(destination);
//创建模拟100个消息
for (int i = 1 ; i <= 100 ; i++){
TextMessage message = session.createTextMessage("我发送message:" + i);
//发送消息
producer.send(message);
//在本地打印消息
System.out.println("我现在发的消息是:" + message.getText());
}
//关闭连接
connection.close();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 查看是否消息产生成功
- 编写消费者代码(消费队列模型的消息)
package com.hnu.scw.queue;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
/**
* @ Author :scw
* @ Date :Created in 上午 11:30 2018/7/14 0014
* @ Description:消息消费者
* @ Modified By:
* @Version: $version$
*/
public class MessageConsumer {
//定义ActivMQ的连接地址
private static final String ACTIVEMQ_URL = "tcp://127.0.0.1:61616";
//定义发送消息的队列名称
private static final String QUEUE_NAME = "MyMessage";
public static void main(String[] args) throws JMSException {
//创建连接工厂
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
//创建连接
Connection connection = activeMQConnectionFactory.createConnection();
//打开连接
connection.start();
//创建会话
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//创建队列目标
Destination destination = session.createQueue(QUEUE_NAME);
//创建消费者
javax.jms.MessageConsumer consumer = session.createConsumer(destination);
//创建消费的监听
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println("获取消息:" + textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
查看是否进行了消费
备注:我上面进行的是队列模式的消息,而且进行的都是单个消费者,那如果我换成同时有两个消费者消费生产者的消息会怎么样呢?(我们只需要运行两个消费者就可以啦。当然,要保证生产者是产生了消息的哦~~~~否则,拿什么消费呢~)
一个生产者,两个消费者的情况如下:
切记:先运行两个消费者,然后再运行生产者代码:
结果如下:
其实,这就是解释了,我之前说的,队列模式的消息,是只会被一个消费者所使用的,而不会被共享,这也就是和主题模型的差别哦~哈哈~~
情形二:主题模型的消息
前面的步骤都一样,只是生产者和消费者的代码有点区别:
3. 编写生产者(这个和队列模型其实很像,稍微修改就可以)
package com.hnu.scw.topic;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
/**
* @ Author :scw
* @ Date :Created in 上午 11:48 2018/7/14 0014
* @ Description:${description}
* @ Modified By:
* @Version: $version$
*/
public class MessageTopicProducer {
//定义ActivMQ的连接地址
private static final String ACTIVEMQ_URL = "tcp://127.0.0.1:61616";
//定义发送消息的主题名称
private static final String TOPIC_NAME = "MyTopicMessage";
public static void main(String[] args) throws JMSException {
//创建连接工厂
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
//创建连接
Connection connection = activeMQConnectionFactory.createConnection();
//打开连接
connection.start();
//创建会话
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//创建队列目标
Destination destination = session.createTopic(TOPIC_NAME);
//创建一个生产者
javax.jms.MessageProducer producer = session.createProducer(destination);
//创建模拟100个消息
for (int i = 1; i <= 100; i++) {
TextMessage message = session.createTextMessage("当前message是(主题模型):" + i);
//发送消息
producer.send(message);
//在本地打印消息
System.out.println("我现在发的消息是:" + message.getText());
}
//关闭连接
connection.close();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 查看生产者的消息
- 编写消费者
package com.hnu.scw.topic;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
/**
* @ Author :scw
* @ Date :Created in 上午 11:50 2018/7/14 0014
* @ Description:${description}
* @ Modified By:
* @Version: $version$
*/
public class MessageTopicConsumer {
//定义ActivMQ的连接地址
private static final String ACTIVEMQ_URL = "tcp://127.0.0.1:61616";
//定义发送消息的队列名称
private static final String TOPIC_NAME = "MyTopicMessage";
public static void main(String[] args) throws JMSException {
//创建连接工厂
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
//创建连接
Connection connection = activeMQConnectionFactory.createConnection();
//打开连接
connection.start();
//创建会话
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//创建队列目标
Destination destination = session.createTopic(TOPIC_NAME);
//创建消费者
javax.jms.MessageConsumer consumer = session.createConsumer(destination);
//创建消费的监听
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println("获取消息:" + textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 查看是否消费成功
然而,我们运行消费者代码,发现怎么没有消息消费呢?????????
其实,这就是主题模型的一个特点,如果消费者是在生产者产生消息之后来的,那么是不会对之前的消息进行消费的哦。。。现在知道它们的区别在哪了吧。
如果,现在是两个消费者和一个生产者的主题模型又是怎么的结果呢?
哎哟。。。。这种情况消费者都各自消费了所有的生产者的消息耶。。。。。这就是共享性消息的主题模式,这就是和队列模型的区别,,,大家好好的对比哦~~
ActiveMQ使用(基于Spring)
步骤:
1. 创建一个Maven项目(基于最简单的quick骨架即可)
2. 导入Spring和ActiveMQ的相关依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hnu.scw</groupId>
<artifactId>activemq</artifactId>
<version>1.0-SNAPSHOT</version>
<name>activemq</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<spring.version>4.2.5.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--添加activemq的依赖-->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.9.0</version>
</dependency>
<!--spring整合activemq所需要的依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-core</artifactId>
<version>5.7.0</version>
<exclusions>
<exclusion>
<artifactId>spring-context</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 编写生产者的配置文件.xml,取名为producer.xml
<?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"
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 ">
<context:annotation-config />
<!--Activemq的连接工厂-->
<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://127.0.0.1:61616" />
</bean>
<!--spring jms为我们提供的连接池 获取一个连接工厂-->
<bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
<property name="targetConnectionFactory" ref="targetConnectionFactory" />
</bean>
<!-- 消息目的地 点对点的模式-->
<bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="SpringActiveMQMsg"/>
</bean>
<!-- jms模板 用于进行消息发送-->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
</bean>
</beans>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 编写生产者的接口
package com.hnu.scw.spring;
/**
* @ Author :scw
* @ Date :Created in 下午 12:19 2018/7/14 0014
* @ Description:生产者的接口
* @ Modified By:
* @Version: $version$
*/
public interface ProduceService {
void sendMessage(String msg);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 编写生产者的实现
package com.hnu.scw.spring;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import javax.annotation.Resource;
import javax.jms.*;
/**
* @ Author :scw
* @ Date :Created in 下午 2:21 2018/7/15 0015
* @ Description:生产者的实现类
* @ Modified By:
* @Version: $version$
*/
public class ProduceServiceImpl implements ProduceService {
@Autowired
private JmsTemplate jmsTemplate;
@Resource(name = "queueDestination")
private Destination destination;
/**
* 发送消息
* @param msg
*/
@Override
public void sendMessage(final String msg) {
jmsTemplate.send(destination , new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
TextMessage textMessage = session.createTextMessage(msg);
return textMessage;
}
});
System.out.println("现在发送的消息为: " + msg);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 将生产者的类添加到上述的配置文件中
<!--注入我们的生产者-->
<bean class="com.hnu.scw.spring.ProduceServiceImpl"/>
- 1
- 2
- 编写生产者的测试类
package com.hnu.scw.spring;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @ Author :scw
* @ Date :Created in 下午 2:27 2018/7/15 0015
* @ Description:生产者的测试
* @ Modified By:
* @Version: $version$
*/
public class ProducerTest {
public static void main(String[] args){
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("producer.xml");
ProduceService bean = classPathXmlApplicationContext.getBean(ProduceService.class);
//进行发送消息
for (int i = 0; i < 100 ; i++) {
bean.sendMessage("test" + i);
}
//当消息发送完后,关闭容器
classPathXmlApplicationContext.close();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 运行测试类,查看生产者是否产生消息成功
通过上述的界面,就可以看到自己配置的队列模式的消息产生成功。 - 编写消费者的消息监听类
- 编写消费者的配置文件,命名为consumer.xml
<?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"
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 ">
<context:annotation-config />
<!--Activemq的连接工厂-->
<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://127.0.0.1:61616" />
</bean>
<!--spring jms为我们提供的连接池 获取一个连接工厂-->
<bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
<property name="targetConnectionFactory" ref="targetConnectionFactory" />
</bean>
<!-- 消息目的地 点对点的模式-->
<bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="SpringActiveMQMsg"/>
</bean>
<!-- 配置消息监听器-->
<bean id="consumerMessageListener" class="com.hnu.scw.spring.ComsumerMessageListener"/>
<!--配置消息容器-->
<bean id ="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<!--配置连接工厂-->
<property name="connectionFactory" ref="connectionFactory"/>
<!--配置监听的队列-->
<property name="destination" ref="queueDestination"/>
<!--配置消息监听器-->
<property name="messageListener" ref="consumerMessageListener"/>
</bean>
</beans>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 编写测试文件,测试消费者消费消息是否成功
package com.hnu.scw.spring;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @ Author :scw
* @ Date :Created in 下午 3:13 2018/7/15 0015
* @ Description:消费者的测试
* @ Modified By:
* @Version: $version$
*/
public class ConsumerTest {
public static void main(String[] args){
//启动消费者
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("consumer.xml");
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 查看ActiveMQ网站具体消息情况
- ActiveMQ的队列模型就大功告成啦。。。。。。so easy!!!
备注:上面都是进行的ActiveMQ的队列模型的配置,那么我们如果想进行主题模型的又是如何进行操作呢?其实也很简单,只需要修改生产者的xml文件里面的队列即可。比如如下代码:
<!-- 消息目的地 (主题模式)-->
<!--<bean id="queueDestination" class="org.apache.activemq.command.ActiveMQTopic">
<!–配置队列模型的消息名称–>
<constructor-arg value="SpringActiveMQMsgTopic"/>
</bean>-->
- 1
- 2
- 3
- 4
- 5
将上面的代码替换之前的就可以了。。。
总结:总的来说,基于Spring来使用消息队列还是非常方便的,这比我们正常进行JMS规范操作要简单很多,毕竟很多对象都是通过Spring的IOC进行容器管理了,所以,值得推荐使用哦~~~
ActiveMQ的集群
为什么要进行集群呢?
原因一:实现高可用:以排除单点故障所引起的服务终端。
原因二:实现负载均衡:以提升效率为更多的客户进行服务。
集群的方式有哪些?
方式一:客户端集群:多个客户端消费同一个队列。
方式二:Broker clusters:多个Broker之间同步消息。(实现负载均衡)
这个的实现原理主要是通过网络连接器来进行。
网络连接器:用于配置ActiveMQ服务器与服务器之间的网络通讯方式,用于服务器透析消息。主要分为静态连接和动态连接。
方式三:Master Slave :实现高可用。
这种方式的话,可以联想到Mysql的主从配置和Zookeeper的负载均衡的主竞争关系master。
我们在实际的开发中,一般都是将方式二和方式三进行集成,从而实现高可用和负载均衡。下面的话,我也就这样的配置思想来进行讲解:(通过三台服务器来模拟消息集群的实现)
其中的NodeB和NodeC就是一张Master/slave的关系。都可以成为主服务器。(只要它们某一个宕机,那么就会其余的一台就进行继续服务)
搭建步骤(基于Windows环境,而Linux环境也是一样的操作)
三台服务器的大体功能和描述:
由于自己没有三台服务器,所以就用自己的一台电脑来模拟三台消息服务器,其实这个就是假设有三个不同ActiveMQ消息服务器了。
1. 复制三个ActiveMQ的服务配置到一个公共目录
2. 修改activeMQA的配置文件
只需要在activemq.xml添加如下内容:
<networkConnectors>
<networkConnector name="local_network" uri ="static:(tcp://127.0.0.1:61617,tcp://127.0.0.1:61618)" />
</networkConnectors>
- 1
- 2
- 3
- 修改ActiveMQB的配置文件
(1)首先在activemq,xml中添加如下内容:
<!--修改服务端口-->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61617?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<networkConnectors>
<networkConnector name="networktoA" uri="static:(tcp://127.0.0.1:61616)" />
</networkConnectors>
<!--并修改下面这个标签的内容 , 作为B和C的共享文件,目录就是自己之前创建的一个文件(可以回看上面的整个结构)-->
<persistenceAdapter>
<kahaDB directory="D:\Download\MQJiQun\shareDB"/>
</persistenceAdapter>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
(2)修改jetty.xml内容,修改服务器的服务端口
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
<!-- the default port number for the web console -->
<property name="host" value="0.0.0.0"/>
<property name="port" value="8162"/>
</bean>
- 1
- 2
- 3
- 4
- 5
- 修改ActiveMQC的配置文件(其实类似和B一样,只是服务端口不一样)
(1)修改activemq.xml中的内容
<!--修改服务端口-->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61618?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<networkConnectors>
<networkConnector name="networktoA" uri="static:(tcp://127.0.0.1:61616)" />
</networkConnectors>
<!--并修改下面这个标签的内容 , 作为B和C的共享文件,目录就是自己之前创建的一个文件(可以回看上面的整个结构)-->
<persistenceAdapter>
<kahaDB directory="D:\Download\MQJiQun\shareDB"/>
</persistenceAdapter>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
(2)修改jetty.xml中的内容
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
<!-- the default port number for the web console -->
<property name="host" value="0.0.0.0"/>
<property name="port" value="8163"/>
</bean>
- 1
- 2
- 3
- 4
- 5
- 集群搭建完成~~~~
集群测试(基于IDEA编辑器+Maven)
步骤:
(1)创建Maven项目
(2)导入依赖
<!--添加activemq的依赖-->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.9.0</version>
</dependency>
- 1
- 2
- 3
- 4
- 5
- 6
(3)编写生产者代码
package com.hnu.scw.queue;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
/**
* @ Author :scw
* @ Date :Created in 上午 11:06 2018/7/14 0014
* @ Description:用于消息的创建类
* @ Modified By:
* @Version: $version$
*/
public class MessageProducer {
//通过集群的方式进行消息服务器的管理(failover就是进行动态转移,当某个服务器宕机,
// 那么就进行其他的服务器选择,randomize表示随机选择)
private static final String ACTIVEMQ_URL = "failover:(tcp://127.0.0.1:61617,tcp://127.0.0.1:61618)?randomize=true";
//定义发送消息的队列名称
private static final String QUEUE_NAME = "MyMessage";
public static void main(String[] args) throws JMSException {
//创建连接工厂
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
//创建连接
Connection connection = activeMQConnectionFactory.createConnection();
//打开连接
connection.start();
//创建会话
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//创建队列目标
Destination destination = session.createQueue(QUEUE_NAME);
//创建一个生产者
javax.jms.MessageProducer producer = session.createProducer(destination);
//创建模拟100个消息
for (int i = 1 ; i <= 100 ; i++){
TextMessage message = session.createTextMessage("当前message是:" + i);
//发送消息
producer.send(message);
//在本地打印消息
System.out.println("我现在发的消息是:" + message.getText());
}
//关闭连接
connection.close();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
(4)编写消费者代码
package com.hnu.scw.queue;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
/**
* @ Author :scw
* @ Date :Created in 上午 11:30 2018/7/14 0014
* @ Description:消息消费者
* @ Modified By:
* @Version: $version$
*/
public class MessageConsumer {
//通过集群的方式进行消息服务器的管理(failover就是进行动态转移,当某个服务器宕机,
// 那么就进行其他的服务器选择,randomize表示随机选择)
private static final String ACTIVEMQ_URL = "failover:(tcp://127.0.0.1:61616,tcp://127.0.0.1:61617,tcp://127.0.0.1:61618)?randomize=true";
//定义发送消息的队列名称
private static final String QUEUE_NAME = "MyMessage";
public static void main(String[] args) throws JMSException {
//创建连接工厂
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
//创建连接
Connection connection = activeMQConnectionFactory.createConnection();
//打开连接
connection.start();
//创建会话
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//创建队列目标
Destination destination = session.createQueue(QUEUE_NAME);
//创建消费者
javax.jms.MessageConsumer consumer = session.createConsumer(destination);
//创建消费的监听
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println("获取消息:" + textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
(5)进行查看各自的服务器的消息队列的情况。
1. 首先,是要确保三个ActiveMQ服务器都进行打开。分析:当三个都服务都运行之后,我们从浏览器运行各自的地址,会发现:
比如:我这里的三个服务的地址分别如下:
重点
为什么前面两个都可以访问,而第三个不可以呢?(同样也是按照我的这样的服务器打开方式哦。先打开的服务器A,接着B,最后C)但是,运行的时候,提示都成功了呀。。为什么为什么???
分析:其实很简单,我说过B和C是一种master/slave的方式,当B运行之后就获得了master的权限,那么C服务是可以看到是一种监听的状态,只有当B宕机之后,才有可能获取master的资源权限,所以,这时候C的地址当然就无法访问啦。这就是负载均衡的一种主/从服务的结构。当然,你可以试着先打开C,再打开B,这时候效果就反过来了。欢迎尝试哦~~~
2. 再运行MessageProducer的类,用于产生消息。这时候,大家可以去查看每个服务器的地址,来观察消息的产生情况。我的如下:
我的消息是产生在服务器B的里面啦。。。。。。
3. 再运行MessageConsumer的类,用于消费消息。这时候,同样可以去查看每个服务器的地址中的消息队列的情况,来观察消息的消费情况。我的如下:
4. 如果,我们在生产者产生了消息之后,服务器B突然宕机了怎么办怎么办??
分析:其实,这时候服务器C就一样有消息保存进行同步了。。是不是这样就是一种高可用的架构了呢????大家,可以试试哦。。把B服务器关掉,再去访问服务器C的地址,就发现如下的结果。
这时候服务器C就作为了master,所以,类似zookeeper就是这样的一种方式的哦。~
总结
好了,对于集群方面的简单使用就到这里了。其实已经可以根据这个进行扩展了,所以,小伙伴要好好理解这里面的过程和作用,这样才能够学以致用。。。
其他的消息中间件
其实,类似ActiveMQ这样的消息中间件,用得比较多的还有就是RabbitMQ和Kafka。它们三者各自有各自的优势。大家可以百度进行了解,我就不进行多说了。后面我会同样把这两种消息中间件的使用进行详细的讲解,欢迎大家的关注哦~总的来说,只有适合的场景对应的消息中间件才能发挥最大的作用,没有一种是只有好处而没有坏处的~
总结
- 主要是对消息中间件的基础知识进行讲解。
- 主要讲解ActiveMQ的使用
- 主要讲解了关于ActiveMQ的集群的搭建
- 稍微提到了类似ActiveMQ消息中间件的其他中间件
- 我所讲述的内容,够大家进行入门了,如果要进行深入的了解还是需要慢慢的去熟悉和学习的,而且消息中间件是非常重要的一个技术,希望大家去好好的了解。
- 最后,感谢各位的阅读哦~~~~
MQ消息中间件(工作+面试)
11-13 阅读数 1万+
AMQP协议介绍AMQP,即AdvancedMessageQueuingProtocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。AMQP的主要特征是面向消息、队列、路由... 博文 来自: Lunaqi的博客
消息中间件(一)MQ详解及四大MQ比较
08-29 阅读数 6万+
一、消息中间件相关知识1、概述消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消... 博文 来自: jcpp9527的博客
ActiveMQ详细入门使用教程
06-06 阅读数 4万+
ActiveMQ介绍 MQ是消息中间件,是一种在分布式系统中应用程序借以传递消息的媒介,常用的有ActiveMQ,RabbitMQ,kafka。ActiveMQ是Apache下的开源项目,完全... 博文 来自: .... 永远年轻,永远热泪盈眶
<div class="recommend-item-box recommend-ad-box"><div id="_0lvrana0whq"><iframe scrolling="no" src="https://pos.baidu.com/s?hei=60&wid=852&di=u3491668&ltu=https%3A%2F%2Fblog.csdn.net%2Fcs_hnu_scw%2Farticle%2Fdetails%2F81040834&psi=e9c46624f4a7deefdb4251341608ba95&ps=30724x402&drs=1&cec=UTF-8&tpr=1560915529891&tcn=1560915530&pcs=1349x632&dc=3&ant=0&cce=true&dri=0&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DEmjQQx4B1SAA0L1DcwtFl5kTl1fDWtnFkSlaJLbcY-z8YKseYeGxChh0rV2qpg9AynuYepmWA3c3qmfSg_84CfBbcT0hvAPrxpXracilbiO%26wd%3D%26eqid%3Db32fc732003aa805000000035d0989aa&psr=1366x768&dtm=HTML_POST&tlm=1560915529&ari=2&chi=2&ccd=24&cja=false&cfv=0&col=zh-CN&exps=111000,110011&dai=2&dis=0&prot=2&cmi=0&pss=1349x31192&par=1366x728&pis=-1x-1&cdo=-1&ti=(8%E6%9D%A1%E6%B6%88%E6%81%AF)%E6%89%8B%E6%8A%8A%E6%89%8B%E6%95%99%E4%BD%A0%E5%A6%82%E4%BD%95%E7%8E%A9%E8%BD%AC%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6%EF%BC%88ActiveMQ%EF%BC%89%20-%20Cs_hnu_scw%E7%9A%84%E5%8D%9A%E5%AE%A2%20-%20CSDN%E5%8D%9A%E5%AE%A2&cpl=0" width="852" height="60" frameborder="0"></iframe></div><script type="text/javascript" src="//rabc1.iteye.com/production/res/rxjg.js?pkcgstj=jm"></script></div>
ActiveMQ的作用总结(应用场景及优势)
06-08 阅读数 1万+
业务场景说明:消息队列在大型电子商务类网站,如京东、淘宝、去哪儿等网站有着深入的应用,队列的主要作用是消除高并发访问高峰,加快网站的响应速度。在不使用消息队列的情况下,用户的请求数据直接写入数据库,在... 博文 来自: qinweili751的博客
JAVA ActiveMQ 详解
05-31 阅读数 1335
一、JMS是java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。消息模型○Point-to-Point(P2P)○Publish/Subscribe(Pub/Sub)即点对点和... 博文 来自: 吃四碗饭的嘤嘤怪的博客
centos 查看命令源码
11-19 阅读数 14万+
#yuminstallyum-utils设置源:[base-src]name=CentOS-5.4-Basesrc-baseurl=http://vault.centos.org/5.4/os/SRP... 博文 来自: linux/unix
消息中间件ActiveMQ简单示例
07-11 阅读数 298
使用场景:分布式系统中,不同系统之间传递消息。 比如系统B要监听系统A的消息,当A发出消息的时候,系统B根据消息,做相应的变化。这个场景很容易理解,就是不同系统之间的异步交互。 2.在系统A中,自己发... 博文 来自: 胡献根的博客
消息队列ActiveMQ的使用
01-17 阅读数 2万+
-----------------ActiveMQ-----------------一、ActiveMQ核心概念1、ActiveMQ是消息队列技术,为解决高并发问题而生!2、ActiveMQ生产者消费... 博文 来自: 匿名攻城狮的博客
<div class="recommend-item-box recommend-ad-box"><div id="_mky0b4g76t"><iframe scrolling="no" src="https://pos.baidu.com/s?hei=60&wid=852&di=u3491668&ltu=https%3A%2F%2Fblog.csdn.net%2Fcs_hnu_scw%2Farticle%2Fdetails%2F81040834&psi=e9c46624f4a7deefdb4251341608ba95&ti=(8%E6%9D%A1%E6%B6%88%E6%81%AF)%E6%89%8B%E6%8A%8A%E6%89%8B%E6%95%99%E4%BD%A0%E5%A6%82%E4%BD%95%E7%8E%A9%E8%BD%AC%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6%EF%BC%88ActiveMQ%EF%BC%89%20-%20Cs_hnu_scw%E7%9A%84%E5%8D%9A%E5%AE%A2%20-%20CSDN%E5%8D%9A%E5%AE%A2&cpl=0&prot=2&dis=0&cja=false&cfv=0&ps=31205x402&dtm=HTML_POST&col=zh-CN&tlm=1560915529&tcn=1560915530&cdo=-1&tpr=1560915529891&dc=3&dri=1&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DEmjQQx4B1SAA0L1DcwtFl5kTl1fDWtnFkSlaJLbcY-z8YKseYeGxChh0rV2qpg9AynuYepmWA3c3qmfSg_84CfBbcT0hvAPrxpXracilbiO%26wd%3D%26eqid%3Db32fc732003aa805000000035d0989aa&dai=3&pcs=1349x632&chi=2&psr=1366x768&cce=true&ari=2&pss=1349x31259&par=1366x728&cmi=0&drs=1&pis=-1x-1&ant=0&cec=UTF-8&ccd=24&exps=111000,116009,110011" width="852" height="60" frameborder="0"></iframe></div><script type="text/javascript" src="//rabc1.iteye.com/production/res/rxjg.js?pkcgstj=jm"></script></div>
手把手教你如何玩转面试(操作系统)
10-18 阅读数 1508
本篇是讲解关于JavaWeb岗位面试方面的一些对于操作系统知识的整理,当然,不只是需要知道这个方面的内容,还需要掌握其他方面的知识,我都根据自己的经历来进行了整理,方便大家进行系统化的... 博文 来自: Cs_hnu_scw的博客
深入浅出JMS(二)--ActiveMQ简单介绍以及安装
07-31 阅读数 12万+
现实的企业中,对于消息通信的应用一直都非常的火热,而且在J2EE的企业应用中扮演着特殊的角色,所以对于它研究是非常有必要的。... 博文 来自: 努力+坚持,而且还很年轻
<div class="recommend-item-box blog-expert-recommend-box" style="">
<div class="d-flex">
<div class="blog-expert-recommend">
<div class="blog-expert">
<div class="blog-expert-flexbox"></div>
</div>
</div>
</div>
</div>
Active MQ的使用
04-08 阅读数 3038
ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线。一、ActiveMQ特性:1、多种语言和协议编写客户端。语言:Java,C,C++,C#,Ruby,Perl,Python,PHP... 博文 来自: hangshao的博客
手把手教你如何玩转面试(数据库)
10-18 阅读数 1143
本篇是讲解对于数据库知识的整理,当然,不只是需要知道这个方面的内容,还需要掌握其他方面的知识,我都根据自己的经历来进行了整理,方便大家进行系统化的学习,只有多复习多研究,才能对技术有更好的掌握,才能拿... 博文 来自: Cs_hnu_scw的博客
手把手教你如何玩转面试(高阶知识点)
08-30 阅读数 466
本篇是讲解关于JavaWeb岗位面试方面的一些对于数据结构知识的整理,当然,不只是需要知道这个方面的内容,还需要掌握其他方面的知识,我都根据自己的经历来进行了整理,方便大家进行系统化的学习,只有多复习... 博文 来自: Cs_hnu_scw的博客
<div class="recommend-item-box recommend-ad-box"><div id="_k8xs8jpahg"><iframe scrolling="no" src="https://pos.baidu.com/s?hei=60&wid=852&di=u3491668&ltu=https%3A%2F%2Fblog.csdn.net%2Fcs_hnu_scw%2Farticle%2Fdetails%2F81040834&psi=e9c46624f4a7deefdb4251341608ba95&cfv=0&cdo=-1&exps=111000,110011&prot=2&cpl=0&dtm=HTML_POST&ti=(8%E6%9D%A1%E6%B6%88%E6%81%AF)%E6%89%8B%E6%8A%8A%E6%89%8B%E6%95%99%E4%BD%A0%E5%A6%82%E4%BD%95%E7%8E%A9%E8%BD%AC%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6%EF%BC%88ActiveMQ%EF%BC%89%20-%20Cs_hnu_scw%E7%9A%84%E5%8D%9A%E5%AE%A2%20-%20CSDN%E5%8D%9A%E5%AE%A2&ari=2&cja=false&drs=1&pcs=1349x632&pss=1349x31739&ant=0&dri=2&dai=4&cce=true&par=1366x728&cec=UTF-8&dis=0&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DEmjQQx4B1SAA0L1DcwtFl5kTl1fDWtnFkSlaJLbcY-z8YKseYeGxChh0rV2qpg9AynuYepmWA3c3qmfSg_84CfBbcT0hvAPrxpXracilbiO%26wd%3D%26eqid%3Db32fc732003aa805000000035d0989aa&tpr=1560915529891&psr=1366x768&tcn=1560915530&tlm=1560915529&cmi=0&dc=3&chi=2&ccd=24&pis=-1x-1&col=zh-CN&ps=31686x402" width="852" height="60" frameborder="0"></iframe></div><script type="text/javascript" src="//rabc1.iteye.com/production/res/rxjg.js?pkcgstj=jm"></script></div>
Java消息中间件——ActiveMQ的安装教程
12-17 阅读数 519
Java消息中间件——ActiveMQ的安装教程第一步:下载ActiveMQ,http://activemq.apache.org/activemq-5144-release.html第二步,下载好A... 博文 来自: tracy的博客
手把手教你如何玩转Maven
10-31 阅读数 703
我相信,如果能认真的看完这些内容的话,对于Maven的使用肯定是没问题的,所以认真看看呗。另外的话,关于后面介绍的项目搭建,采用的环境是Eclipse,所以如果你采用的IDE是用的IDEA的话,那... 博文 来自: Cs_hnu_scw的博客
ActiveMq的使用(一)快速入门
07-08 阅读数 1848
ActiveMQ 的作用分析2.ActiveMQ工作原理(JSMjavamessageserver) 解决服务之间的耦合 使用消息队列,增加系统并发处理量3.ActiveMQ 应用场景分析 1、用... 博文 来自: weixin_38399962的博客
ActiveMQ:消息中心基本介绍
12-15 阅读数 1480
Redis其实也可以做消息队列,但是更多的企业选择了ActiveMQ,为什么,因为Redis的消息队列比较简单,无法做到像ActiveMQ,那样做做到点对点的消息订阅与发送首先是哪些情况需要用到消息中... 博文 来自: fenghuoliuxing990124的博客
消息中间件ActiveMQ
05-27 阅读数 621
消息中间件ActiveMQ一、分布式系统架构1.背景随着互联网的快速发展和云服务概念的普及,使得我们在搭建系统的时候越来越倾向于分布式系统架构,那么分布式系统架构要涉及到哪些知识点以及我们如何来实现这... 博文 来自: CSDN_HCX的博客
<div class="recommend-item-box recommend-ad-box"><div><iframe scrolling="no" src="//pos.baidu.com/s?hei=60&wid=852&di=u3491668&ltu=https%3A%2F%2Fblog.csdn.net%2Fcs_hnu_scw%2Farticle%2Fdetails%2F81040834&psi=e9c46624f4a7deefdb4251341608ba95&ant=0&tpr=1560915529891&dc=3&dai=5&cfv=0&ccd=24&exps=111000,110011&psr=1366x768&ti=(8%E6%9D%A1%E6%B6%88%E6%81%AF)%E6%89%8B%E6%8A%8A%E6%89%8B%E6%95%99%E4%BD%A0%E5%A6%82%E4%BD%95%E7%8E%A9%E8%BD%AC%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6%EF%BC%88ActiveMQ%EF%BC%89%20-%20Cs_hnu_scw%E7%9A%84%E5%8D%9A%E5%AE%A2%20-%20CSDN%E5%8D%9A%E5%AE%A2&col=zh-CN&dis=0&par=1366x728&cpl=0&ps=32167x402&chi=2&drs=1&cdo=-1&cce=true&ari=2&pss=1349x32220&tcn=1560915530&tlm=1560915530&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DEmjQQx4B1SAA0L1DcwtFl5kTl1fDWtnFkSlaJLbcY-z8YKseYeGxChh0rV2qpg9AynuYepmWA3c3qmfSg_84CfBbcT0hvAPrxpXracilbiO%26wd%3D%26eqid%3Db32fc732003aa805000000035d0989aa&dri=3&pcs=1349x632&cmi=0&dtm=HTML_POST&cja=false&prot=2&cec=UTF-8&pis=-1x-1" width="852" height="60" frameborder="0"></iframe></div><script type="text/javascript" src="//rabc1.iteye.com/production/res/rxjg.js?pkcgstj=jm"></script></div>
ActiveMQ简述
04-15 阅读数 1万+
概述ActiveMQ是Apache所提供的一个开源的消息系统,完全采用Java来实现,因此,它能很好地支持J2EE提出的JMS(JavaMessageService,即Java消息服务)规范。JMS是... 博文 来自: 朱小厮的博客
activemq详细使用教程以及为什么要使用activemq
04-21 阅读数 1万+
mq可以发送多种数据格式,其中就可以发送数据流,那么可以吧文件转换成数据流,发送到mq这种java消息中间件,其他消费者,可以以主题或者点对点的模式来接受消息,接受数据流然后转换成文件,也是可以实现的... 博文 来自: 那年的夏天的博客
activeMq简单介绍
05-25 阅读数 811
一.MQ的基本概念1)队列管理器队列管理器是MQ系统中最上层的一个概念,由它为我们提供基于队列的消息服务。2)消息在MQ中,我们把应用程序交由MQ传输的数据定义为消息,我们可以定义消息的内容并对消息进... 博文 来自: chy19911123的专栏
<div class="recommend-item-box recommend-ad-box"><div id="_wkn5rp0wfu7"><iframe scrolling="no" src="https://pos.baidu.com/s?hei=60&wid=852&di=u3491668&ltu=https%3A%2F%2Fblog.csdn.net%2Fcs_hnu_scw%2Farticle%2Fdetails%2F81040834&psi=e9c46624f4a7deefdb4251341608ba95&tpr=1560915529891&ari=2&pis=-1x-1&cja=false&exps=111000,115009,110011&dc=3&pss=1349x32701&cce=true&tlm=1560915530&prot=2&col=zh-CN&chi=2&dri=4&cfv=0&cdo=-1&ps=32648x402&par=1366x728&ccd=24&cpl=0&cmi=0&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DEmjQQx4B1SAA0L1DcwtFl5kTl1fDWtnFkSlaJLbcY-z8YKseYeGxChh0rV2qpg9AynuYepmWA3c3qmfSg_84CfBbcT0hvAPrxpXracilbiO%26wd%3D%26eqid%3Db32fc732003aa805000000035d0989aa&dai=6&dtm=HTML_POST&dis=0&ant=0&ti=(8%E6%9D%A1%E6%B6%88%E6%81%AF)%E6%89%8B%E6%8A%8A%E6%89%8B%E6%95%99%E4%BD%A0%E5%A6%82%E4%BD%95%E7%8E%A9%E8%BD%AC%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6%EF%BC%88ActiveMQ%EF%BC%89%20-%20Cs_hnu_scw%E7%9A%84%E5%8D%9A%E5%AE%A2%20-%20CSDN%E5%8D%9A%E5%AE%A2&pcs=1349x632&cec=UTF-8&tcn=1560915530&drs=1&psr=1366x768" width="852" height="60" frameborder="0"></iframe><ins id="nwlkzflaoj" style="display:none;"></ins></div><script type="text/javascript" src="//rabc1.iteye.com/production/res/rxjg.js?pkcgstj=jm"></script></div>
ActiveMQ 简介 安装 配置
07-07 阅读数 1676
ActiveMQ简介安装配置更多请看 (www.omob.cc)MQ简介:MQ全称为MessageQueue,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应... 博文 来自: thinktik的博客
消息中间件系列之Java API操作ActiveMQ
03-20 阅读数 1104
一、依赖&lt;dependency&gt;&lt;groupId&gt;org.apache.activemq&lt;/groupId&gt;&... 博文 来自: u014469692的博客
Java=>消息中间件ActiveMQ之主题【初学篇】
09-11 阅读数 55
1.创建maven工程,在pom.xml导入日志包和ActiveMQ包 &lt;!--https://mvnrepository.com/artifact/org.slf4j/slf4j-ap... 博文 来自: jiliang272的博客
ActiveMQ 快速入门教程系列 第一章 点对点消息实现
01-24 阅读数 1773
前期准备第一节:JMS规范简介第二节:ActiveMQ简介第三节:ActiveMQ开发包下载及运行环境搭建JMS介绍:百度百科ActiveMQ介绍:百度百科主页:http://activemq.apa... 博文 来自: Eshare分享
<div class="recommend-item-box recommend-ad-box"><div><iframe scrolling="no" src="//pos.baidu.com/s?hei=60&wid=852&di=u3491668&ltu=https%3A%2F%2Fblog.csdn.net%2Fcs_hnu_scw%2Farticle%2Fdetails%2F81040834&psi=e9c46624f4a7deefdb4251341608ba95&cfv=0&exps=111000,110011&ti=(8%E6%9D%A1%E6%B6%88%E6%81%AF)%E6%89%8B%E6%8A%8A%E6%89%8B%E6%95%99%E4%BD%A0%E5%A6%82%E4%BD%95%E7%8E%A9%E8%BD%AC%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6%EF%BC%88ActiveMQ%EF%BC%89%20-%20Cs_hnu_scw%E7%9A%84%E5%8D%9A%E5%AE%A2%20-%20CSDN%E5%8D%9A%E5%AE%A2&pcs=1349x632&cce=true&cmi=0&cja=false&dc=3&psr=1366x768&cdo=-1&col=zh-CN&tpr=1560915529891&tlm=1560915530&ant=0&par=1366x728&dai=7&ccd=24&ps=33128x402&tcn=1560915530&chi=2&dtm=HTML_POST&cpl=0&drs=1&dri=5&ari=2&prot=2&dis=0&pis=-1x-1&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DEmjQQx4B1SAA0L1DcwtFl5kTl1fDWtnFkSlaJLbcY-z8YKseYeGxChh0rV2qpg9AynuYepmWA3c3qmfSg_84CfBbcT0hvAPrxpXracilbiO%26wd%3D%26eqid%3Db32fc732003aa805000000035d0989aa&pss=1349x33182&cec=UTF-8" width="852" height="60" frameborder="0"></iframe></div><script type="text/javascript" src="//rabc1.iteye.com/production/res/rxjg.js?pkcgstj=jm"></script></div>
activeMQ连接池的配置(以及流程图)
03-21 阅读数 1万+
准备工作从下面官网下载ActiveMQ,本文使用5.7版本,写博时Maven库能找到的最高版本为5.7http://activemq.apache.org/download-archives.html... 博文 来自: 张肖的博客
activemq的几种基本通信方式总结
07-07 阅读数 90
简介 在前面一篇文章里讨论过几种应用系统集成的方式,发现实际上面向消息队列的集成方案算是一个总体比较合理的选择。这里,我们先针对具体的一个消息队列Activemq的基本通信方式进行探讨。activ... 博文 来自: 点缀星辰
ActiveMQ入门案例
12-25 阅读数 189
目录大家好我是爱学习的张三,今天我们来简单的学习一下ActiveMQ消息队列首先来啰嗦一下activemq是什么东西ActiveMQ是Apache出品,最流行的,能力最强劲的开源消息总线,是一个完全支... 博文 来自: miss_01的博客
消息队列ActiveMQ的使用详解
04-21 阅读数 2296
通过上一篇文章《消息队列深入解析》,我们已经消息队列是什么、使用消息队列的好处以及常见消息队列的简单介绍。这一篇文章,主要带大家详细了解一下消息队列ActiveMQ的使用。学习消息队列ActiveMQ... 博文 来自: 不忘初心
【代码管理】GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流
01-29 阅读数 3万+
①总结GitHub常用操作,看不懂看下面的详细讲解;②对Git进行详细的介绍:详解Git的分布式,离线操作;③msysgit的下载,安装,配置,GitBash和GitGUI使用;④Git的相关知识--... 博文 来自: 让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 )
<div class="recommend-item-box recommend-ad-box"><div id="_ppo6bkgccfm"><iframe scrolling="no" src="https://pos.baidu.com/s?hei=60&wid=852&di=u3491668&ltu=https%3A%2F%2Fblog.csdn.net%2Fcs_hnu_scw%2Farticle%2Fdetails%2F81040834&psi=e9c46624f4a7deefdb4251341608ba95&cpl=0&dri=6&pss=1396x33684&chi=2&cce=true&drs=1&col=zh-CN&tpr=1560915529891&psr=1366x768&par=1366x728&ti=(8%E6%9D%A1%E6%B6%88%E6%81%AF)%E6%89%8B%E6%8A%8A%E6%89%8B%E6%95%99%E4%BD%A0%E5%A6%82%E4%BD%95%E7%8E%A9%E8%BD%AC%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6%EF%BC%88ActiveMQ%EF%BC%89%20-%20Cs_hnu_scw%E7%9A%84%E5%8D%9A%E5%AE%A2%20-%20CSDN%E5%8D%9A%E5%AE%A2&dc=3&cja=false&tcn=1560915530&ant=0&ari=2&dai=8&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DEmjQQx4B1SAA0L1DcwtFl5kTl1fDWtnFkSlaJLbcY-z8YKseYeGxChh0rV2qpg9AynuYepmWA3c3qmfSg_84CfBbcT0hvAPrxpXracilbiO%26wd%3D%26eqid%3Db32fc732003aa805000000035d0989aa&prot=2&dtm=HTML_POST&exps=111000,115009,110011&cec=UTF-8&cdo=-1&tlm=1560915530&pis=-1x-1&dis=0&pcs=1349x615&ccd=24&cmi=0&cfv=0&ps=33630x402" width="852" height="60" frameborder="0"></iframe><div class="cosupbocuw" style="width:0px;height:0px;padding-top:0px;"></div></div><script type="text/javascript" src="//rabc1.iteye.com/production/res/rxjg.js?pkcgstj=jm"></script></div>
最佳实战:用Cocos2d-x3.x和C++11编写2048游戏以及游戏AI(全民2048 Android版上线啦)
05-05 阅读数 1万+
话说,年仅19岁的意大利人GabrieleCirulli于2014年3月完成并发布在github上,游戏设计来自于《1024》,而《1024》灵感来源于《Threes!》的移动端游戏。然而游戏飙升的人... 博文 来自: 代码菌的blog
共同父域下的单点登录
03-04 阅读数 2万+
单点登录(SingleSignOn),简称为SSO,SSO不仅在企业级开发很常用,在互联网中更是大行其道。随便举几个例子,比如我们登录新浪微博后,再访问新浪首页后,我们发现,已经自动登录了;再比如我们... 博文 来自: 高爽|Coder
卡顿监测之真正轻量级的卡顿监测工具BlockDetectUtil(仅一个类)
03-01 阅读数 1万+
一、背景 一直以来,应用的流畅度都关乎着用户的体验性,而体验性好的产品自然而然会受到更多用户的欢迎,所以对于广大的工程师来说,界面的卡顿优化一直是Android应用性能优化的重要一环。而当前应用... 博文 来自: u012874222的博客
ActiveMQ + NodeJS + Stomp 极简入门
01-30 阅读数 8096
前提 安装ActiveMQ和Nodejs测试步骤1.执行bin\win32\activemq.bat启动MQ服务2.打开http://localhost:8161/admin/topics.jsp用户... 博文 来自: 力为的博客
ActiveMQ在C#中的应用
06-04 阅读数 3万+
ActiveMQ是个好东东,不必多说。ActiveMQ提供多种语言支持,如Java,C,C++,C#,Ruby,Perl,Python,PHP等。由于我在windows下开发GUI,比较关心C++和C... 博文 来自: bodybo的专栏
<div class="recommend-item-box recommend-ad-box"><div id="_0nch3zave1ph"><iframe scrolling="no" src="https://pos.baidu.com/s?hei=60&wid=852&di=u3491668&ltu=https%3A%2F%2Fblog.csdn.net%2Fcs_hnu_scw%2Farticle%2Fdetails%2F81040834&psi=e9c46624f4a7deefdb4251341608ba95&psr=1366x768&par=1366x728&pss=1396x34186&cpl=0&ti=(8%E6%9D%A1%E6%B6%88%E6%81%AF)%E6%89%8B%E6%8A%8A%E6%89%8B%E6%95%99%E4%BD%A0%E5%A6%82%E4%BD%95%E7%8E%A9%E8%BD%AC%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6%EF%BC%88ActiveMQ%EF%BC%89%20-%20Cs_hnu_scw%E7%9A%84%E5%8D%9A%E5%AE%A2%20-%20CSDN%E5%8D%9A%E5%AE%A2&ccd=24&tpr=1560915529891&dri=7&dtm=HTML_POST&dc=3&ari=2&ps=34132x402&cfv=0&dai=9&drs=1&prot=2&tcn=1560915530&chi=2&cmi=0&cec=UTF-8&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DEmjQQx4B1SAA0L1DcwtFl5kTl1fDWtnFkSlaJLbcY-z8YKseYeGxChh0rV2qpg9AynuYepmWA3c3qmfSg_84CfBbcT0hvAPrxpXracilbiO%26wd%3D%26eqid%3Db32fc732003aa805000000035d0989aa&col=zh-CN&pcs=1349x615&ant=0&cce=true&tlm=1560915530&cja=false&pis=-1x-1&dis=0&cdo=-1&exps=111000,110011" width="852" height="60" frameborder="0"></iframe></div><script type="text/javascript" src="//rabc1.iteye.com/production/res/rxjg.js?pkcgstj=jm"></script></div>
ActiveMQ深入浅出(二)——ActiveMQ简单介绍以及安装
07-25 阅读数 164
现实的企业中,对于消息通信的应用一直都非常的火热,而且在J2EE的企业应用中扮演着特殊的角色,所以对于它研究是非常有必要的。上篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了消息通信的规范JMS... 博文 来自: 唯爱与信任不可负的博客
DirectX修复工具增强版
02-09 阅读数 208万+
最后更新:2019-5-26DirectX修复工具最新版:DirectXRepairV3.8增强版NEW!版本号:V3.8.0.11638大小:107MB/7z格式压缩,189MB/zip格式压缩,3... 博文 来自: VBcom的专栏
Spring3MVC提交弹出窗口表单后,自动返回父窗口的列表页面
02-16 阅读数 8830
方法:@RequestMapping(value="/save") publicStringsave(HttpServletResponseresponse){//跳出框架弹窗口iFrame,直接返回... 博文 来自: hellostory的专栏
安卓开发--textView的字体样式设置(设置宋体,微软雅黑等)
12-10 阅读数 2万+
最近项目中出现把字体设置成宋体,微软雅黑,黑体,楷体等的需求;度娘发现Android系统默认支持三种字体,分别为:“sans”, “serif”, “monospace",除此之外还可以使... 博文 来自: tubinbin5201314的博客
<div class="recommend-item-box recommend-ad-box"><div id="_1fdvswp30u9" style="width: 100%;"><iframe scrolling="no" src="https://pos.baidu.com/s?hei=60&wid=852&di=u3491668&ltu=https%3A%2F%2Fblog.csdn.net%2Fcs_hnu_scw%2Farticle%2Fdetails%2F81040834&psi=e9c46624f4a7deefdb4251341608ba95&dtm=HTML_POST&par=1366x728&ps=34613x402&tcn=1560915530&cfv=0&pis=-1x-1&dc=3&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DEmjQQx4B1SAA0L1DcwtFl5kTl1fDWtnFkSlaJLbcY-z8YKseYeGxChh0rV2qpg9AynuYepmWA3c3qmfSg_84CfBbcT0hvAPrxpXracilbiO%26wd%3D%26eqid%3Db32fc732003aa805000000035d0989aa&cpl=0&psr=1366x768&tpr=1560915529891&tlm=1560915530&ti=(8%E6%9D%A1%E6%B6%88%E6%81%AF)%E6%89%8B%E6%8A%8A%E6%89%8B%E6%95%99%E4%BD%A0%E5%A6%82%E4%BD%95%E7%8E%A9%E8%BD%AC%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6%EF%BC%88ActiveMQ%EF%BC%89%20-%20Cs_hnu_scw%E7%9A%84%E5%8D%9A%E5%AE%A2%20-%20CSDN%E5%8D%9A%E5%AE%A2&ccd=24&dai=10&pcs=1349x615&cdo=-1&dis=0&pss=1396x34666&cce=true&drs=1&exps=111000,110011&ant=0&cja=false&chi=2&ari=2&prot=2&col=zh-CN&cmi=0&cec=UTF-8&dri=8" width="852" height="60" frameborder="0"></iframe><span style="display:none;text-align:left;"></span></div><script type="text/javascript" src="//rabc1.iteye.com/production/res/rxjg.js?pkcgstj=jm"></script></div><div class="recommend-item-box baiduSearch recommend-box-ident" data-track-view="{"mod":"popu_614","con":",https://blog.csdn.net/Cs_hnu_scw/article/details/79896500,searchFromBaidu1_0,-"}" data-track-click="{"mod":"popu_614","con":",https://blog.csdn.net/Cs_hnu_scw/article/details/79896500,searchFromBaidu1_0,-"}" data-flg="true"> <a href="https://blog.csdn.net/Cs_hnu_scw/article/details/79896500" target="_blank"> <h4 class="text-truncate oneline" style="width: 754px;"><em>手把手</em><em>教你</em><em>如何</em><em>玩转</em>面试(操作系统) - Cs_hnu_scw的博客 - CSDN博客</h4> <div class="info-box d-flex align-content-center"> <p> <span class="date">10-22</span> </p> </div> <p class="content oneline" style="width: 852px;">来自: Cs_hnu_scw的博客 下载 手把手教你构建自己的LINUX系统(高清完整版)...手把手教你如何玩转消息中间件(ActiveMQ) 手把手教你如何玩转Redis入门 个人...</p> </a> </div><div class="recommend-item-box baiduSearch" data-track-click="{"mod":"popu_614","con":",https://blog.csdn.net/huxiangen/article/details/80997667,searchFromBaidu1_1,-"}" data-flg="true"> <a href="https://blog.csdn.net/huxiangen/article/details/80997667" target="_blank"> <h4 class="text-truncate oneline" style="width: 762px;"><em>消息中间件</em><em>ActiveMQ</em>简单示例 - 胡献根的博客 - CSDN博客</h4> <div class="info-box d-flex align-content-center"> <p> <span class="date">11-7</span> </p> </div> <p class="content oneline" style="width: 852px;">1.下载ActiveMQ http://activemq.apache.org/download-archives.html 2....手把手教你如何玩转消息中间件(ActiveMQ) - cs_hnu_scw的博客(如果,你想学好...</p> </a> </div>
4种方法让SpringMVC接收多个对象
07-10 阅读数 15万+
问题背景:我要在一个表单里同时一次性提交多名乘客的个人信息到SpringMVC,前端HTML和SpringMVCController里该如何处理?第1种方法:表单提交,以字段数组接收;第2种方法:表单... 博文 来自: 一个情绪猿的脖克...
activeMQ消息发送过程与原理浅析
07-31 阅读数 8865
这篇文章重点分析使用JMS向activeMQ中间件发送消息的过程分析。同步发送与异步发送activeMQ发送消息客户端发送消息分为同步发送与异步发送同步发送,发送者发送一条消息会阻塞直到broker反... 博文 来自: 嘎嘎的博客
ActiveMQ---知识点整理
02-03 阅读数 1173
一.背景介绍1.1java消息服务: 不同系统之间的信息交换,是我们开发中比较常见的场景,比如系统A要把数据发送给系统B,这个问题我们应该如何去处理? 1999年,原来的SUN公司领衔提出了一种面向消... 博文 来自: java is 因缺思厅
activemq 应答模式
03-20 阅读数 88
一、序言 JMS用于系统解耦有一定帮助,像我们iteye的一些系统消息,可能非重要要消息,就没那么严格的限制,统一异步发送就行了,反正上线你就能看到。有些情况下我们需要消息两端进行确认,比如一些... 博文 来自: Hello World
<div class="recommend-item-box recommend-ad-box"><div id="_dbix6bn9t3j"><iframe scrolling="no" src="https://pos.baidu.com/s?hei=60&wid=852&di=u3491668&ltu=https%3A%2F%2Fblog.csdn.net%2Fcs_hnu_scw%2Farticle%2Fdetails%2F81040834&psi=e9c46624f4a7deefdb4251341608ba95&exps=111000,115009,110011&chi=2&cmi=0&cce=true&tpr=1560915529891&prot=2&par=1366x728&pis=-1x-1&cfv=0&dc=3&ant=0&psr=1366x768&dai=11&col=zh-CN&cdo=-1&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DEmjQQx4B1SAA0L1DcwtFl5kTl1fDWtnFkSlaJLbcY-z8YKseYeGxChh0rV2qpg9AynuYepmWA3c3qmfSg_84CfBbcT0hvAPrxpXracilbiO%26wd%3D%26eqid%3Db32fc732003aa805000000035d0989aa&cpl=0&cja=false&ti=(8%E6%9D%A1%E6%B6%88%E6%81%AF)%E6%89%8B%E6%8A%8A%E6%89%8B%E6%95%99%E4%BD%A0%E5%A6%82%E4%BD%95%E7%8E%A9%E8%BD%AC%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6%EF%BC%88ActiveMQ%EF%BC%89%20-%20Cs_hnu_scw%E7%9A%84%E5%8D%9A%E5%AE%A2%20-%20CSDN%E5%8D%9A%E5%AE%A2&tcn=1560915530&drs=1&dtm=HTML_POST&pcs=1349x615&ari=2&tlm=1560915530&dri=9&ccd=24&dis=0&cec=UTF-8&pss=1396x35147&ps=35094x402" width="852" height="60" frameborder="0"></iframe><span style="width:0px;height:0px;"></span></div><script type="text/javascript" src="//rabc1.iteye.com/production/res/rxjg.js?pkcgstj=jm"></script></div>
在Tomcat中集成ActiveMQ
03-22 阅读数 46
tomcat版本:6.0.20activeMQ版本:5.2网上有一些介绍,但是很多都是采用JNDI的方式,麻烦,而且tomcat和activemq要分别启动,理想的方式是启动tomcat的同时启动ac... 博文 来自: 老艮额的专栏
http://www.pythonware.com/products/pil/
2.解压后,进入到目录下
cd /Users/jianan/Dow…
博文
来自: 专注于cocos+unity+服务器全栈
结果没有显示局域网的IP地址
2.我们去修改网卡配置文件,把网络连接打开
cd /
cd /etc/sys…
博文
来自: sfeng95的博客
二值神经网络(Binary Neural Network,BNN)
03-18 阅读数 3万+
在我刚刚过去的研究生毕设中,我在ImageNet数据集上验证了图像特征二值化后仍然具有很强的表达能力,可以在检索中达到较好的效果。而Bengio大神的这篇文章,则不止于将特征二值化,而是要将权重和每层... 博文 来自: 雨石
因为需要用,所以才翻译了这个文档。但总归赖于英语水平很有限,翻译出来的中文有可能…
博文
来自: ymj7150697的专栏
RUtils -- 建立在Rserve之上的Java与R语言通信工具集
10-26 阅读数 6876
注1:RUtils是我偶然发现的一个工具包,它建立在Rserve之上,可以很大程度上简化我们的程序,关于Rserve网络上有很多相关的内容,这里不对其进行介绍,比如这里:http://blog.fen... 博文 来自: 竹叶青的专栏
搭建图片服务器《二》-linux安装nginx
09-22 阅读数 8万+
nginx是个好东西,Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambl... 博文 来自: maoyuanming0806的博客
使用Unity实现卡拉OK歌词过渡效果
02-12 阅读数 1686
好长时间之前做过的一个项目 , 其中设计到用Unity模拟卡拉OK歌词过渡的效果 , 如下图所示 ↓ , 这里简单把原理部分分享一下.
演示效果 ↓
实现歌词动态调整功能
实现动态读取歌…
博文
来自: 月儿圆
链接(freemarker)
10-30 阅读数 498
http://blog.csdn.net/liaomin416100569/article/details/78349072 博文 来自: biao285869350
Docx4j 简单操作文字图片(包含页眉页脚和主体内容)
11-12 阅读数 1万+
docx4j官方提供了一些例子,本文只是其中一部分应用的简单例子。需要注意的地方是页眉和页脚,必须创建对应关系才能起作用。页眉和页脚添加图片的时候,第二个参数sourcePart是必须的,调用的cre... 博文 来自: 偶尔记一下
本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,…
博文
来自: Marswill
分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!http://www.captainbed.net/strongerhuang
推荐…
博文
来自: strongerHuang的专栏
ThreadLocal的设计理念与作用
09-25 阅读数 9万+
Java中的ThreadLocal类允许我们创建只能被同一个线程读写的变量。因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的Thread... 博文 来自: u011860731的专栏
如何用一行C++代码读写数据库
08-01 阅读数 9263
这篇文章要表达的并非数据库相关的知识,而是如何使用DBIOWrapper。 DBIOWrapper是一个工作在Windows下、对ODBC式数据访问进行了小型封装的库。其设计目标是提供极简... 博文 来自: 哈哈 哈 哈哈,哈 哈 哈哈哈
强连通分量及缩点tarjan算法解析
11-16 阅读数 66万+
强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量 使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点) 定义: int Ti... 博文 来自: 九野的博客
忘记Oracle数据库管理员密码的解决办法
02-13 阅读数 1万+
安装oracle 9i后,居然把刚刚更改的数据库管理员密码给忘了,又不重新安装,太麻烦了,试了好久,终于修改成功了。1、运行到C盘根目录2、输入:SET ORACLE_SID = 你的SID名称3、输... 博文 来自: llxsharp的专栏
Cocos2d-x 2.2.3 使用NDK配置编译环境
06-11 阅读数 2万+
Cocos2d-x 2.2.3 使用NDK配置编译环境2014年6月11日 Cocos2d-x 3.0以下的开发环境的配置恐怕折磨了很多人,使用cygwin配置编译环境足够让初学者蛋疼一阵子了。本篇博... 博文 来自: 巫山老妖
最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!
//js
…
博文
来自: Websites
关于SpringBoot bean无法注入的问题(与文件包位置有关)
12-16 阅读数 27万+
问题场景描述整个项目通过Maven构建,大致结构如下: 核心Spring框架一个module spring-boot-base service和dao一个module server-core 提供系统... 博文 来自: 开发随笔
- 先来看看错误详情
获取 VirtualBox COM 对象失败.应用程序将被中断.Failed to instantiate CLSID_VirtualBox …
博文
来自: 多点折腾少点抱怨
弹出光盘
root@solaris:/media# eject cdrom
cdrom /dev/dsk/c7t0d…
博文
来自: 数据之路-忆梦前程
保护模式及其编程——8086系统寄存器和系统指令
02-18 阅读数 1233
摘要:为了协助处理器完成初始化和控制系统操作,80x86提供了一个标志寄存器和几个系统寄存器。Eflags用于控制任务切换、中断处理、指令跟踪和权限访问。系统寄存器用于内存管理和控制处理器操作。
1…
博文
来自: 河西无名式
IE9 大数据行table的显示会出现列错位
原因是IE9的BUG
在jsp中使用 table加载大数据量时,td会出现错位,在f…
博文
来自: yzp_soft的专栏
Web前端面试指导(三十):JavaScript有几种类型的值?你能画一下他们的内存图吗?
10-07 阅读数 7718
题目点评 数据类型是所有程序都会涉及到的,是计算机语言比较基础知识,这种问题被问到的可能性其实并不大,这样的题目只要花点时间把它记下来就好了,难易程度一般。 两大类: 栈:原始数据类型(Und... 博文 来自: 雄领IT的专栏
git丢掉本地的修改,还原修改之前的程序
09-18 阅读数 2437
今天在本地做了修改,后来又不想要这次修改的内容,想要还原到修改之前的状态,有一个比较省力的方法,直接从git服务器对应的分支获取覆盖本地的程序。 命令如下:git checkout -f 这样就... 博文 来自: leedaning的专栏
origion绘制热图
07-22 阅读数 6588
有时我们需要绘制热图,用x轴、y轴表示两维数据,用颜色表示第三维 第一步:需要准备三列数据,如图1,这里我用U表示x轴数据,它的取值范围为[0-1],间隔为0.05,E表示y轴,取值范围也是[0-1]... 博文 来自: SunCherryDream的专栏
VS2015+Qt5+OpenCV3开发环境配置
01-08 阅读数 1万+
本文介绍如何使用VS2015作为编译开发环境,调用OpenCV3.31和Qt5.9.1写图像处理的GUI。 1.目录结构 假设我们要创建一个名为VideoZoom的工程,那么首先按下图构建目录结构... 博文 来自: zhhp1001的博客
<div class="recommend-item-box type_hot_word">
<div class="content clearfix" style="width: 852px;">
<div class="word float-left">
<span>
<a href="https://edu.csdn.net/courses/o5329_s5330_k " target="_blank">
机器学习教程 </a></span>
<span>
<a href="https://edu.csdn.net/courses/o280_s351_k " target="_blank">
Objective-C培训 </a></span>
<span>
<a href="https://edu.csdn.net/combos/o7115_s388_l0_t " target="_blank">
交互设计视频教程 </a></span>
<span>
<a href="https://edu.csdn.net/course/play/5599/104252 " target="_blank">
颜色模型 </a></span>
<span>
<a href="https://edu.csdn.net/combos/o363_l0_t " target="_blank">
设计制作学习 </a></span>
</div>
</div>
<div class="content clearfix" style="width: 852px;">
<div class="float-left">
<span>
<a href="https://www.csdn.net/gather_24/MtTaEg3sMDM5MS1ibG9n.html" target="_blank">
mysql关联查询两次本表</a>
</span>
<span>
<a href="https://www.csdn.net/gather_10/MtjaIg3sMTUzMy1kb3dubG9hZAO0O0OO0O0O.html" target="_blank">
native底部 react</a>
</span>
<span>
<a href="https://www.csdn.net/gather_1b/Ntzagg1sOTU3LWRvd25sb2Fk.html" target="_blank">
extjs glyph 图标</a>
</span>
<span>
<a href="https://www.csdn.net/gather_4a/MtzaEg5sOC1lZHUO0O0O.html" target="_blank">
手把手教你python</a>
</span>
<span>
<a href="https://www.csdn.net/gather_4a/MtjaQgwsOS1lZHUO0O0O.html" target="_blank">
教你学python</a>
</span>
</div>
</div>
</div><div class="recommend-item-box baiduSearch" data-track-click="{"mod":"popu_614","con":",https://blog.csdn.net/tracydragonlxy/article/details/78786786,searchFromBaidu1_2,-"}" data-flg="true"> <a href="https://blog.csdn.net/tracydragonlxy/article/details/78786786" target="_blank"> <h4 class="text-truncate oneline" style="width: 754px;">Java<em>消息中间件</em>——<em>ActiveMQ</em>的安装教程 - tracy的博客 - CSDN博客</h4> <div class="info-box d-flex align-content-center"> <p> <span class="date">11-17</span> </p> </div> <p class="content oneline" style="width: 852px;">手把手教你如何玩转消息中间件(ActiveMQ) - Cs_hnu_scw的博客 07-15 622 情景引入 情景分析 基本概念的引导 本模块主要讲解关于消息中间件的相关基础知识,也...</p> </a> </div><div class="recommend-item-box baiduSearch" data-track-click="{"mod":"popu_614","con":",https://blog.csdn.net/cs_hnu_scw/article/details/78302536,searchFromBaidu1_3,-"}" data-flg="true"> <a href="https://blog.csdn.net/cs_hnu_scw/article/details/78302536" target="_blank"> <h4 class="text-truncate oneline" style="width: 754px;"><em>手把手</em><em>教你</em><em>如何</em><em>玩转</em>Maven - Cs_hnu_scw的博客 - CSDN博客</h4> <div class="info-box d-flex align-content-center"> <p> <span class="date">10-16</span> </p> </div> <p class="content oneline" style="width: 852px;">https://blog.csdn.net/Cs_hnu_scw/article/details/78302536 我...手把手教你如何玩转消息中间件(ActiveMQ) 手把手教你如何玩转Redis入门 手把手...</p> </a> </div>
<div class="recommend-loading-box">
<img src="https://csdnimg.cn/release/phoenix/images/feedLoading.gif">
</div>
<div class="recommend-end-box" style="display: block;">
<p class="text-center">没有更多推荐了,<a href="https://blog.csdn.net/" class="c-blue c-blue-hover c-blue-focus">返回首页</a></p>
</div>
</div>
</main>