1.签收
public interface Session extends Runnable {
int AUTO_ACKNOWLEDGE = 1; // 自动签收
int CLIENT_ACKNOWLEDGE = 2; // 客户端确认签收
int DUPS_OK_ACKNOWLEDGE = 3; // 自动批量进行签收
int SESSION_TRANSACTED = 0; // 事务提交就签收
}
注意:事务会话中,如果一个事务提交成功,这个时候就签收!事务混滚,消息就会被再次传送。
没有事务的情况下,如果是 客户端确认签收,那则需要手动签收。
一般用自动 手动
message.acknowledge(); // 消息确认签收
2.Broker
Broker:将 ActvieMQ … 以代码的形式内嵌到我们程序中。保证随时可以启动进行使用。
官网地址:http://activemq.apache.org/how-do-i-embed-a-broker-inside-a-connection
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.0</version>
</dependency>
代码
public class EmbedBroker {
public static void main(String[] args) throws Exception {
// 1.创建服务
BrokerService broker = new BrokerService();
// 2、配置连接地址
// jmx是java的一个新框架
// 允许将我们所有的资源(软件和硬件)封装一个Java对象,直接暴露在服务中即可使用
broker.setUseJmx(true);
broker.addConnector("tcp://localhost:61616");
// 3、启动
broker.start();
}
}
3.整合SpringBoot
1.导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.配置yaml
server:
port: 9000
spring:
activemq:
broker-url: tcp://127.0.0.1:61616
user: admin
password: admin
jms:
pub-sub-domain: false # false 队列, true 主题
myqueue: coding-queue
比较
server.port=9090
spring.activemq.broker-url=tcp://127.0.0.1:61616
# 在考虑结束之前等待的时间
#spring.activemq.close-timeout=15s
# 默认代理URL是否应该在内存中。如果指定了显式代理,则忽略此值。
spring.activemq.in-memory=true
# 是否在回滚回滚消息之前停止消息传递。这意味着当启用此命令时,消息顺序不会被保留。
spring.activemq.non-blocking-redelivery=false
# 等待消息发送响应的时间。设置为0等待永远。
spring.activemq.send-timeout=0
#默认情况下activemq提供的是queue模式,若要使用topic模式需要配置下面配置
spring.jms.pub-sub-domain=true
#账号
spring.activemq.user=admin
# 密码
spring.activemq.password=admin
# 是否信任所有包
#spring.activemq.packages.trust-all=
# 要信任的特定包的逗号分隔列表(当不信任所有包时)
#spring.activemq.packages.trusted=
# 当连接请求和池满时是否阻塞。设置false会抛“JMSException异常”。
#spring.activemq.pool.block-if-full=true
# 如果池仍然满,则在抛出异常前阻塞时间。
#spring.activemq.pool.block-if-full-timeout=-1ms
# 是否在启动时创建连接。可以在启动时用于加热池。
#spring.activemq.pool.create-connection-on-startup=true
# 是否用Pooledconnectionfactory代替普通的ConnectionFactory。
#spring.activemq.pool.enabled=false
# 连接过期超时。
#spring.activemq.pool.expiry-timeout=0ms
# 连接空闲超时
#spring.activemq.pool.idle-timeout=30s
# 连接池最大连接数
#spring.activemq.pool.max-connections=1
# 每个连接的有效会话的最大数目。
#spring.activemq.pool.maximum-active-session-per-connection=500
# 当有"JMSException"时尝试重新连接
#sp