Spring Boot 支援
JMS
Java message Service,支援 JmsTemplate
AMQP
Advanced Message Queue Protocol
為 RabbitMQ 提供 RabbitTemplate
Apache Kafka
KafkaTemplate
STOMP
Simple Text-Oriented Message Protocol
org.springframework.boot.autoconfigure.AutoConfiguration.imports
自動設定類別
JmsAutoConfiguration
ArtemisAutoConfiguration
RabbitAutoConfiguration
KafkaAutoConfiguration
ActiveMQ
JMS 主流 ActiveMQ, RocketMQ
JMS 有兩個版本
JMS 1.1
JMS 2.0
ActiveMQ 有兩個主要版本
ActiveMQ Classic
ActiveMQ 5.x 以前
JMS 1.1
ActiveMQ Artemis
ActiveMQ 6.x+
JMS 2.0
下載 apache-artemis-2.38.0-bin.tar.gz
tar zxvf apache-artemis-2.38.0-bin.tar.gz
mkdir -p /root/download/artemis/data/
apache-artemis-2.38.0/bin/artemis create mybroker
建立 broker
# ../apache-artemis-2.38.0/bin/artemis create mybroker
Creating ActiveMQ Artemis instance at: /root/download/artemis/data/mybroker
--user:
What is the default username?
admin
--password: is mandatory with this configuration:
What is the default password?
--allow-anonymous | --require-login:
Allow anonymous access?, valid values are Y, N, True, False
n
Auto tuning journal ...
done! Your system can make 7.58 writes per millisecond, your journal-buffer-timeout will be 132000
You can now start the broker by executing:
"/root/download/artemis/data/mybroker/bin/artemis" run
Or you can run the broker in the background using:
"/root/download/artemis/data/mybroker/bin/artemis-service" start
修改 /root/download/artemis/data/mybroker/etc/bootstrap.xml 的 artemis uri,由 localhost 改為 0.0.0.0
<web path="web" rootRedirectLocation="console">
<binding name="artemis" uri="http://0.0.0.0:8161">
<app name="branding" url="activemq-branding" war="activemq-branding.war"/>
<app name="plugin" url="artemis-plugin" war="artemis-plugin.war"/>
<app name="console" url="console" war="console.war"/>
</binding>
</web>
啟動後,可瀏覽 web console http://192.168.1.89:8161/
pom.xml 增加 spring-boot-starter-artemis
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-artemis</artifactId>
</dependency>
org.springframework.boot.autoconfigure.AutoConfiguration.imports
自動設定類別
JmsAutoConfiguration
JndiConnectionFactoryAutoConfiguration
ArtemisAutoConfiguration
只要設定 spring.jms.*
及 spring.artemis.*
spring:
jms:
cache:
enabled: true
session-cache-size: 5 # default: 1
artemis:
mode: native
broker-url: tcp://localhost:61616
user: admin
password: password
也可以加上 pool
spring:
jms:
cache:
enabled: true
session-cache-size: 5 # default: 1
artemis:
mode: native
broker-url: tcp://localhost:61616
user: admin
password: password
pool:
enabled: true # default: false
max-connections: 50 # default: 1
idle-timeout: 5s # default: 30s
max-sessions-per-connection: 100 # default: 500
還須要加上 library
<dependency>
<groupId>org.messaginghub</groupId>
<artifactId>pooled-jms</artifactId>
</dependency>
補上 web library
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
MsgController.java
package com.test.artemis;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RequiredArgsConstructor
@RestController
@Slf4j
public class MsgController {
private final JmsTemplate jmsTemplate;
/**
* send message
* @param msg
* @return
*/
@RequestMapping("/send")
public String sendMsg(@RequestParam("msg") String msg) {
jmsTemplate.convertAndSend("test-queue", msg);
return "message is sent";
}
/**
* receive message
* @param msg
*/
@JmsListener(destination = "test-queue")
public void receiveMsg(String msg) {
log.info("receive ActiveMQ message:{}", msg);
}
}
測試網址
http://localhost:8080/send?msg=test1234
console 可看到
receive ActiveMQ message:test1234
沒有留言:
張貼留言