ActiveMQ 安装到使用基础教程
安装
-
下载地址:http://activemq.apache.org/download-archives.html,选择一个你喜欢的版本,这里我选择windpws系统的。
-
下载完成后,解压。
bin----存放的是脚本文件
conf----存放的是基本配置文件
data----存放的是日志文件
docs----存放的是说明文档
examples----存放的是简单的实例
lib----存放的是activemq所需jar包
webapps----用于存放项目的目录
- 进入bin\win64文件夹进入,以管理员身份运行activemq.bat文件即可;5672等端口报错就找到conf\activemq.xml文件,修改如下即可:
<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name= "openwire" uri= "tcp://127.0.0.1:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600" />
<transportConnector name= "amqp" uri= "amqp://127.0.0.1:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600" />
<transportConnector name= "stomp" uri= "stomp://127.0.0.1:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600" />
<transportConnector name= "mqtt" uri= "mqtt://127.0.0.1:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600" />
<transportConnector name= "ws" uri= "ws://127.0.0.1:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600" />
</transportConnectors>
- 启动成功访问http://127.0.0.1:8161/admin/queues.jsp,默认账号密码但是admin。
springboot整合ActiveMQ
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
<version>5.15.8</version>
</dependency>
配置文件
spring:
activemq:
broker-url: tcp://127.0.0.1:61616
user: admin #账号
password: admin #a密码
queue-name: test # 在http://127.0.0.1:8161/admin/queues.jsp登录成功之后创建
pool:
enabled: true
max-connections: 10
配置类
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.config.JmsListenerContainerFactory;
import org.springframework.jms.config.SimpleJmsListenerContainerFactory;
import javax.jms.ConnectionFactory;
import javax.jms.Queue;
/**
* 配置类
*/
@Configuration
public class ActiveMQConfig {
@Value("${spring.activemq.broker-url}")
private String brokerUrl;
@Value("${spring.activemq.user}")
private String userName;
@Value("${spring.activemq.password}")
private String password;
@Value("${spring.activemq.queue-name}")
private String queueName;
@Bean(name = "queue")
public Queue queue() {
return new ActiveMQQueue(queueName);
}
@Bean
public ConnectionFactory connectionFactory(){
return new ActiveMQConnectionFactory(userName, password, brokerUrl);
}
// 在Queue模式中,对消息的监听需要对containerFactory进行配置
@Bean("queueListener")
public JmsListenerContainerFactory<?> queueJmsListenerContainerFactory(ConnectionFactory connectionFactory){
SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setPubSubDomain(false);
return factory;
}
}
controller
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.jms.Destination;
import javax.jms.Queue;
@RestController
public class ProducerController {
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@Autowired
private Queue queue;
@GetMapping("/queue/publish")
public String publish(String str) {
System.out.println("传入内容:" + str);
this.sendMessage(this.queue, str);
return "success";
}
@GetMapping("/queue/subscription")
public String subscription(String str) {
System.out.println("传入内容:" + str);
this.sendMessage(str);
return "success";
}
public void sendMessage(String msg) {
ActiveMQTopic destination = new ActiveMQTopic("lideru.test");
jmsMessagingTemplate.convertAndSend(destination, msg);
}
// 发送消息,destination是发送到的队列,message是待发送的消息
private void sendMessage(Queue queue, final String message) {
jmsMessagingTemplate.convertAndSend(queue, message);
}
}
接收类
import org.springframework.jms.annotation.JmsListener;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class QueueConsumerListener {
//queue模式的消费者 3个 concurrency="3",代表消费者个数
@JmsListener(destination="${spring.activemq.queue-name}", containerFactory="queueListener") //,concurrency="3"
public void readActiveQueue(String message)
{
System.out.println("队列接受到1:" + message);
}
@JmsListener(destination="${spring.activemq.queue-name}", containerFactory="queueListener") //,concurrency="3"
public void readActiveQueue1(String message)
{
System.out.println("queue接受到2:" + message);
}
}
import org.springframework.jms.annotation.JmsListener;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class QueueConsumerListener {
//queue模式的消费者 3个 concurrency="3",代表消费者个数
@JmsListener(destination="${spring.activemq.queue-name}", containerFactory="queueListener") //,concurrency="3"
public void readActiveQueue(String message)
{
System.out.println("队列接受到1:" + message);
}
@JmsListener(destination="${spring.activemq.queue-name}", containerFactory="queueListener") //,concurrency="3"
public void readActiveQueue1(String message)
{
System.out.println("queue接受到2:" + message);
}
}
启动类 注意加@EnableJms注解
@SpringBootApplication
@EnableJms
public class ActivemqApplication {
public static void main(String[] args) {
SpringApplication.run(ActivemqApplication.class, args);
}
}
访问 http://127.0.0.1:8080/queue/publish?str=我暑李登辉
控制台打印
传入内容:我暑李登辉
接受到:我暑李登辉
http://127.0.0.1:8080/queue/subscription?str=渣渣灰
控制台打印
传入内容:渣渣灰
消费者2打了:渣渣灰
消费者1打了:渣渣灰
证明已经成功咯