Merge remote-tracking branch 'origin/master' into master
commit
d425666974
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 40177c6c8dc8e542f046e3f6c95c356280035871
|
@ -0,0 +1 @@
|
|||||||
|
Subproject commit e6e37cef41e56937020347e41b30357e9f1a7196
|
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 9f51525ef0f7703360f4267642f14e8e0c542bc4
|
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 0f4860a23607bdbfdf6a28414daa6b7ece0979a2
|
@ -0,0 +1,25 @@
|
|||||||
|
# 最佳实践
|
||||||
|
|
||||||
|
## 目录介绍
|
||||||
|
|
||||||
|
- sde(Scaffold Development Evironment) 脚手架整合
|
||||||
|
- eladmin
|
||||||
|
- SpringBoot, SpringData Jpa、 JWT、Spring Security、Redis、Vue的前后端分离框架
|
||||||
|
- fast-boot
|
||||||
|
- SpringBoot、SpringSecurity、Mybatis-Plus
|
||||||
|
- guns
|
||||||
|
- SpringBoot、BootStrap
|
||||||
|
- renren-security
|
||||||
|
- SpringBoot、Shiro、MyBatis-Plus
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- TODO 未来把 支付模块 广告模块 电商模块
|
||||||
|
- SCRM CRM CDP 等系统集成进来作为一个Demo级别的项目进行存在
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,46 @@
|
|||||||
|
### Example user template template
|
||||||
|
### Example user template
|
||||||
|
|
||||||
|
# IntelliJ project files
|
||||||
|
.idea
|
||||||
|
*.iml
|
||||||
|
out
|
||||||
|
gen
|
||||||
|
### Maven template
|
||||||
|
target/
|
||||||
|
pom.xml.tag
|
||||||
|
pom.xml.releaseBackup
|
||||||
|
pom.xml.versionsBackup
|
||||||
|
pom.xml.next
|
||||||
|
release.properties
|
||||||
|
dependency-reduced-pom.xml
|
||||||
|
buildNumber.properties
|
||||||
|
.mvn/timing.properties
|
||||||
|
# https://github.com/takari/maven-wrapper#usage-without-binary-jar
|
||||||
|
.mvn/wrapper/maven-wrapper.jar
|
||||||
|
|
||||||
|
### Java template
|
||||||
|
# Compiled class file
|
||||||
|
*.class
|
||||||
|
|
||||||
|
# Log file
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# BlueJ files
|
||||||
|
*.ctxt
|
||||||
|
|
||||||
|
# Mobile Tools for Java (J2ME)
|
||||||
|
.mtj.tmp/
|
||||||
|
|
||||||
|
# Package Files #
|
||||||
|
*.jar
|
||||||
|
*.war
|
||||||
|
*.nar
|
||||||
|
*.ear
|
||||||
|
*.zip
|
||||||
|
*.tar.gz
|
||||||
|
*.rar
|
||||||
|
|
||||||
|
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
|
||||||
|
hs_err_pid*
|
||||||
|
|
@ -0,0 +1,39 @@
|
|||||||
|
<?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">
|
||||||
|
<parent>
|
||||||
|
<artifactId>dev-protocol</artifactId>
|
||||||
|
<groupId>org.example</groupId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../../../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>rocket-api</artifactId>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>8</maven.compiler.source>
|
||||||
|
<maven.compiler.target>8</maven.compiler.target>
|
||||||
|
<!-- 指定 RocketMQ 版本 -->
|
||||||
|
<rocketmq.version>4.3.0</rocketmq.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-actuator</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.rocketmq</groupId>
|
||||||
|
<artifactId>rocketmq-client</artifactId>
|
||||||
|
<version>${rocketmq.version}</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,9 @@
|
|||||||
|
package com.baiye.constants;
|
||||||
|
|
||||||
|
public class Const {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* namesrv 的地址
|
||||||
|
*/
|
||||||
|
public static final String NAMESRV_ADDR = "127.0.0.1:9876";
|
||||||
|
}
|
@ -0,0 +1,72 @@
|
|||||||
|
package com.baiye.consumer;
|
||||||
|
|
||||||
|
import com.baiye.constants.Const;
|
||||||
|
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
|
||||||
|
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
|
||||||
|
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
|
||||||
|
import org.apache.rocketmq.client.exception.MQClientException;
|
||||||
|
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
|
||||||
|
import org.apache.rocketmq.common.message.MessageExt;
|
||||||
|
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消费者 Demo
|
||||||
|
*/
|
||||||
|
public class Consumer {
|
||||||
|
|
||||||
|
public static void main(String[] args) throws MQClientException {
|
||||||
|
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("test_consumer_name");
|
||||||
|
|
||||||
|
consumer.setNamesrvAddr(Const.NAMESRV_ADDR);
|
||||||
|
|
||||||
|
// 设置从什么地方开始消费
|
||||||
|
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);
|
||||||
|
|
||||||
|
consumer.subscribe(
|
||||||
|
"test-topic",
|
||||||
|
"*"
|
||||||
|
);
|
||||||
|
|
||||||
|
consumer.registerMessageListener((MessageListenerConcurrently) (msgs, consumeConcurrentlyContext) -> {
|
||||||
|
MessageExt messageExt = msgs.get(0);
|
||||||
|
|
||||||
|
try {
|
||||||
|
String topic = messageExt.getTopic();
|
||||||
|
String tags = messageExt.getTags();
|
||||||
|
String keys = messageExt.getKeys();
|
||||||
|
|
||||||
|
// FIXME: 2022/7/21 模拟消息消费出现异常的情况
|
||||||
|
if ("key1".equals(keys)) {
|
||||||
|
System.out.println(" 消息消费失败 ... ");
|
||||||
|
int a = 1 / 0;
|
||||||
|
}
|
||||||
|
String msgBody = new String(messageExt.getBody(), StandardCharsets.UTF_8);
|
||||||
|
|
||||||
|
System.out.println("topic = " + topic);
|
||||||
|
System.out.println("tags = " + tags);
|
||||||
|
System.out.println("keys = " + keys);
|
||||||
|
System.out.println("msgBody = " + msgBody);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
|
||||||
|
// FIXME: 2022/7/21 允许消息最大重试次数是多少次,我这里指定为3次
|
||||||
|
int reconsumeTimes = messageExt.getReconsumeTimes();
|
||||||
|
System.out.println("reconsumeTimes = " + reconsumeTimes);
|
||||||
|
if (3 == reconsumeTimes) {
|
||||||
|
// FIXME: 2022/7/21 记录日志,做补偿处理
|
||||||
|
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ConsumeConcurrentlyStatus.RECONSUME_LATER;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
|
||||||
|
});
|
||||||
|
|
||||||
|
consumer.start();
|
||||||
|
|
||||||
|
System.out.println(" consumer start ... ");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
package com.baiye.producer;
|
||||||
|
|
||||||
|
import com.baiye.constants.Const;
|
||||||
|
import org.apache.rocketmq.client.exception.MQBrokerException;
|
||||||
|
import org.apache.rocketmq.client.exception.MQClientException;
|
||||||
|
import org.apache.rocketmq.client.producer.DefaultMQProducer;
|
||||||
|
import org.apache.rocketmq.client.producer.SendResult;
|
||||||
|
import org.apache.rocketmq.common.message.Message;
|
||||||
|
import org.apache.rocketmq.remoting.exception.RemotingException;
|
||||||
|
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生产者 Demo
|
||||||
|
*/
|
||||||
|
public class Producer {
|
||||||
|
|
||||||
|
public static void main(String[] args) throws MQClientException, MQBrokerException, RemotingException, InterruptedException {
|
||||||
|
|
||||||
|
DefaultMQProducer producer = new DefaultMQProducer("test_producer_name");
|
||||||
|
|
||||||
|
producer.setNamesrvAddr(Const.NAMESRV_ADDR);
|
||||||
|
|
||||||
|
producer.start();
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
// 创建消息
|
||||||
|
Message message = new Message(
|
||||||
|
// 主题
|
||||||
|
"test-topic",
|
||||||
|
// 过滤
|
||||||
|
"TAG-A",
|
||||||
|
// 用户自定义的key, 唯一标识
|
||||||
|
"TAG-a",
|
||||||
|
// 消息内容
|
||||||
|
("Hello RocketMQ" + i).getBytes(StandardCharsets.UTF_8)
|
||||||
|
);
|
||||||
|
|
||||||
|
// 发送消息
|
||||||
|
SendResult sendResult = producer.send(message);
|
||||||
|
|
||||||
|
// 消息发送结果
|
||||||
|
System.out.println(sendResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送消息完毕进行关闭
|
||||||
|
producer.shutdown();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue