main
黄海 2 months ago
parent 11f5226fe6
commit fc37221eee

@ -1,193 +0,0 @@
**参考文档**
https://blog.csdn.net/apple_74262176/article/details/141886930
**1、拉取 $RocketMQ$ 镜像**
```sh
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apache/rocketmq:5.3.2
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apache/rocketmq:5.3.2 docker.io/apache/rocketmq:5.3.2
```
**2、 创建容器共享网络 $rocketmq$**
```sh
docker network create rocketmq
```
**3、 部署 $NameServer$ 前提条件**
```
# 创建目录
mkdir -p /data/rocketmq/nameserver/{bin,logs}
# 授权文件
chmod 777 -R /data/rocketmq/nameserver/*
# 创建容器
docker run -d \
--privileged=true --name rmqnamesrv \
docker.io/apache/rocketmq:5.3.2 sh mqnamesrv
# 拷贝启动脚本
docker cp rmqnamesrv:/home/rocketmq/rocketmq-5.3.2/bin/runserver.sh /data/rocketmq/nameserver/bin/
# 删除容器 NameServer
docker rm -f rmqnamesrv
```
**4、启动容器** $NameServer$
```
# 启动容器 NameServer
docker run -d --network rocketmq \
--privileged=true --restart=always \
--name rmqnamesrv -p 9876:9876 \
-v /data/rocketmq/nameserver/logs:/home/rocketmq/logs \
-v /data/rocketmq/nameserver/bin/runserver.sh:/home/rocketmq/rocketmq-5.1.0/bin/runserver.sh \
docker.io/apache/rocketmq:5.3.2 sh mqnamesrv
# 部分命令解释 :
1. -e "MAX_HEAP_SIZE=256M" 设置最大堆内存和堆内存初始大小
2. -e "HEAP_NEWSIZE=128M" 设置新生代内存大小
# 查看启动日志
docker logs -f rmqnamesrv
```
**5、 查看 $NameServer$ 启动日志**
- **看到 The Name Server boot success… 表示NameServer 已成功启动。**
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250522091505752.png)
**6、部署 $Broker + Proxy$**
- **创建挂载文件夹并授权**
```
mkdir -p /data/rocketmq/broker/{store,logs,conf,bin}
chmod 777 -R /data/rocketmq/broker/*
```
**7、创建broker.conf文件**
```
vi /data/rocketmq/broker/conf/broker.conf
# nameServer 地址多个用;隔开 默认值null
# 例127.0.0.1:6666;127.0.0.1:8888
namesrvAddr = 10.10.14.14:9876
# 集群名称
brokerClusterName = DefaultCluster
# 节点名称
brokerName = broker-a
# broker id节点ID 0 表示 master, 其他的正整数表示 slave不能小于0
brokerId = 0
# Broker服务地址 String 内部使用填内网ip如果是需要给外部使用填公网ip
brokerIP1 = 10.10.14.14
# Broker角色
brokerRole = ASYNC_MASTER
# 刷盘方式
flushDiskType = ASYNC_FLUSH
# 在每天的什么时间删除已经超过文件保留时间的 commit log默认值04
deleteWhen = 04
# 以小时计算的文件保留时间 默认值72小时
fileReservedTime = 72
# 是否允许Broker 自动创建Topic建议线下开启线上关闭
autoCreateTopicEnable=true
# 是否允许Broker自动创建订阅组建议线下开启线上关闭
autoCreateSubscriptionGroup=true
# 禁用 tsl
tlsTestModeEnable = false
```
**8、 拷贝启动脚本**
```
# 启动 Broker 容器
docker run -d \
--name rmqbroker --privileged=true \
docker.io/apache/rocketmq:5.3.2 sh mqbroker
# 拷贝脚本文件
docker cp rmqbroker:/home/rocketmq/rocketmq-5.3.2/bin/runbroker.sh /data/rocketmq/broker/bin
```
**9、 启动容器 Broker**
```
# 删除容器 Broker
docker rm -f rmqbroker
# 启动容器 Broker
docker run -d --network rocketmq \
--restart=always --name rmqbroker --privileged=true \
-p 10911:10911 -p 10909:10909 \
-v /data/rocketmq/broker/logs:/root/logs \
-v /data/rocketmq/broker/store:/root/store \
-v /data/rocketmq/broker/conf/broker.conf:/home/rocketmq/broker.conf \
-v /data/rocketmq/broker/bin/runbroker.sh:/home/rocketmq/rocketmq-5.3.2/bin/runbroker.sh \
-e "NAMESRV_ADDR=rmqnamesrv:9876" \
docker.io/apache/rocketmq:5.3.2 sh mqbroker --enable-proxy -c /home/rocketmq/broker.conf
# 查看启动日志
docker logs -f rmqbroker
```
- **启动成功日志如下**
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250522091934903.png)
**10、部署RocketMQ控制台rocketmq-dashboard**
- **拉取镜像**
```sh
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apacherocketmq/rocketmq-dashboard:2.0.1
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apacherocketmq/rocketmq-dashboard:2.0.1 docker.io/apacherocketmq/rocketmq-dashboard:2.0.1
```
**11、 启动容器 Rocketmq-dashboard**
```
docker run -d \
--restart=always --name rmq-dashboard \
-p 8080:8080 --network rocketmq \
-e "JAVA_OPTS=-Xmx256M -Xms256M -Xmn128M -Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \
docker.io/apacherocketmq/rocketmq-dashboard:2.0.1
```
**12、 查看启动日志**
```sh
docker logs -f rmq-dashboard
```
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250522092229565.png)
**13、 访问RMQ控制台**
- [**http://10.10.14.14:8080/**](http://10.10.14.14:8080/) **( IP地址改成自己的 )**
![](D:\dsWork\dsProject\dsAiSupport\Doc\20250522092309206.png)
**14、 查看创建的 RocketMQ**
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250522092331493.png)

@ -0,0 +1,84 @@
### 安装文档
> https://rocketmq.apache.org/zh/docs/4.x/quickstart/01quickstart
>
#### 安装$JDK$
```
cd /usr/local
rz -be
jdk-8u421-linux-x64.tar.gz
tar -xvf jdk-8u421-linux-x64.tar.gz
rm -rf jdk-8u421-linux-x64.tar.gz
mv jdk1.8.0_421/ jdk
vi /etc/profile
GG到最后
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
java -version
```
#### 安装$RocketMQ$
```shell
cd /usr/local
mkdir rocketmq
rz -be
rocketmq-all-4.9.4-bin-release.zip
unzip rocketmq-all-4.9.4-bin-release.zip
rm -rf rocketmq-all-4.9.4-bin-release.zip
mv rocketmq-all-4.9.4-bin-release/ rocketmq
cd rocketmq
### 启动namesrv
nohup sh bin/mqnamesrv &
### 验证namesrv是否启动成功
tail -f /root/logs/rocketmqlogs/namesrv.log
2024-07-31 13:48:37 INFO main - The Name Server boot success. serializeType=JSON
### 启动Broker
nohup sh bin/mqbroker -n localhost:9876 &
### 验证broker是否启动成功
tail -f /root/logs/rocketmqlogs/broker.log
main - The broker[RockyLinux, 10.10.14.210:10911] boot success. serializeType=JSON and name server is localhost:9876
```
#### 消息收发
```
export NAMESRV_ADDR=localhost:9876
cd /usr/local/rocketmq
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
SendResult [sendStatus=SEND_OK, msgId= ...
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
ConsumeMessageThread_%d Receive New Messages: [MessageExt...
```
#### 关闭服务器
```shell
sh bin/mqshutdown broker
sh bin/mqshutdown namesrv
```

@ -43,11 +43,13 @@
<artifactId>java-jwt</artifactId>
<version>4.4.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-client -->
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client-java</artifactId>
<version>5.0.7</version>
<artifactId>rocketmq-client</artifactId>
<version>5.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>

@ -1,12 +1,8 @@
package com.dsideal.aiSupport;
import com.dsideal.aiSupport.Config.RocketMQConfig;
import com.dsideal.aiSupport.Index.IndexController;
import com.dsideal.aiSupport.Interceptor.*;
import com.dsideal.aiSupport.Plugin.YamlProp;
import com.dsideal.aiSupport.Test.MessageProducer;
import com.dsideal.aiSupport.Test.MessagePushConsumer;
import com.dsideal.aiSupport.Test.MyMessageListener;
import com.dsideal.aiSupport.Util.FileUtil;
import com.dsideal.aiSupport.Util.LogBackLogFactory;
import com.jfinal.config.*;
@ -130,8 +126,6 @@ public class AiSupportApplication extends JFinalConfig {
public void configHandler(Handlers me) {
}
private MessageProducer messageProducer;
private MessagePushConsumer messagePushConsumer;
/**
* jfinal
*/
@ -141,20 +135,5 @@ public class AiSupportApplication extends JFinalConfig {
String path = AiSupportApplication.class.getClassLoader().getResource("logo.txt").getPath();
File file = new File(path);
System.out.println(FileUtil.txt2String(file));
// 初始化RocketMQ生产者
messageProducer = new MessageProducer();
// 初始化RocketMQ消费者
MyMessageListener messageListener = new MyMessageListener();
messagePushConsumer = new MessagePushConsumer(
"YourConsumerGroup",
RocketMQConfig.getDefaultTopic(),
"*", // 订阅所有Tag
messageListener
);
// 将生产者注入到全局对象中方便在Controller中使用
//Jboot.setJbootObject(MessageProducer.class.getName(), messageProducer);
}
}

@ -1,33 +0,0 @@
package com.dsideal.aiSupport.Config;
import org.apache.rocketmq.client.apis.ClientConfiguration;
import org.apache.rocketmq.client.apis.ClientConfigurationBuilder;
import org.apache.rocketmq.client.apis.ClientServiceProvider;
public class RocketMQConfig {
// RocketMQ服务器地址
private static final String ENDPOINT = "10.10.14.14:8081";
// 默认主题
private static final String DEFAULT_TOPIC = "TestTopic";
private static ClientServiceProvider provider;
private static ClientConfiguration configuration;
static {
provider = ClientServiceProvider.loadService();
ClientConfigurationBuilder builder = ClientConfiguration.newBuilder().setEndpoints(ENDPOINT);
configuration = builder.build();
}
public static ClientServiceProvider getProvider() {
return provider;
}
public static ClientConfiguration getConfiguration() {
return configuration;
}
public static String getDefaultTopic() {
return DEFAULT_TOPIC;
}
}

@ -1,49 +0,0 @@
package com.dsideal.aiSupport.Test;
import com.dsideal.aiSupport.Config.RocketMQConfig;
import org.apache.rocketmq.client.apis.ClientException;
import org.apache.rocketmq.client.apis.message.Message;
import org.apache.rocketmq.client.apis.producer.Producer;
import org.apache.rocketmq.client.apis.producer.SendReceipt;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
public class MessageProducer {
private static final Logger logger = LoggerFactory.getLogger(MessageProducer.class);
private Producer producer;
public MessageProducer() {
try {
producer = RocketMQConfig.getProvider().newProducerBuilder()
.setTopics(RocketMQConfig.getDefaultTopic())
.setClientConfiguration(RocketMQConfig.getConfiguration())
.build();
} catch (ClientException e) {
logger.error("Failed to create producer", e);
}
}
public void sendMessage(String topic, String tag, String key, String body) {
try {
Message message = RocketMQConfig.getProvider().newMessageBuilder()
.setTopic(topic)
.setKeys(key)
.setTag(tag)
.setBody(body.getBytes())
.build();
SendReceipt sendReceipt = producer.send(message);
logger.info("Send message successfully, messageId={}", sendReceipt.getMessageId());
} catch (ClientException e) {
logger.error("Failed to send message", e);
}
}
public void close() throws IOException {
if (producer != null) {
producer.close();
}
}
}

@ -1,40 +0,0 @@
package com.dsideal.aiSupport.Test;
import com.dsideal.aiSupport.Config.RocketMQConfig;
import org.apache.rocketmq.client.apis.ClientException;
import org.apache.rocketmq.client.apis.consumer.FilterExpression;
import org.apache.rocketmq.client.apis.consumer.FilterExpressionType;
import org.apache.rocketmq.client.apis.consumer.MessageListener;
import org.apache.rocketmq.client.apis.consumer.PushConsumer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.Collections;
public class MessagePushConsumer {
private static final Logger logger = LoggerFactory.getLogger(MessagePushConsumer.class);
private PushConsumer pushConsumer;
public MessagePushConsumer(String consumerGroup, String topic, String tag, MessageListener messageListener) {
try {
FilterExpression filterExpression = new FilterExpression(tag, FilterExpressionType.TAG);
pushConsumer = RocketMQConfig.getProvider().newPushConsumerBuilder()
.setClientConfiguration(RocketMQConfig.getConfiguration())
.setConsumerGroup(consumerGroup)
.setSubscriptionExpressions(Collections.singletonMap(topic, filterExpression))
.setMessageListener(messageListener)
.build();
logger.info("Consumer started successfully");
} catch (ClientException e) {
logger.error("Failed to create consumer", e);
}
}
public void close() throws IOException {
if (pushConsumer != null) {
pushConsumer.close();
}
}
}

@ -1,32 +0,0 @@
package com.dsideal.aiSupport.Test;
import org.apache.rocketmq.client.apis.consumer.ConsumeResult;
import org.apache.rocketmq.client.apis.consumer.MessageListener;
import org.apache.rocketmq.client.apis.message.MessageView;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyMessageListener implements MessageListener {
private static final Logger logger = LoggerFactory.getLogger(MyMessageListener.class);
@Override
public ConsumeResult consume(MessageView messageView) {
try {
String messageId = String.valueOf(messageView.getMessageId());
String topic = messageView.getTopic();
String tag = String.valueOf(messageView.getTag());
byte[] body = messageView.getBody().array();
String content = new String(body);
logger.info("Received message: messageId={}, topic={}, tag={}, content={}",
messageId, topic, tag, content);
// 处理消息的业务逻辑
return ConsumeResult.SUCCESS;
} catch (Exception e) {
logger.error("Failed to consume message", e);
return ConsumeResult.FAILURE;
}
}
}

@ -0,0 +1,142 @@
package com.charge.tools;
import org.apache.rocketmq.client.consumer.DefaultLitePullConsumer;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.MessageQueueSelector;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.common.message.MessageQueue;
import org.apache.rocketmq.remoting.common.RemotingHelper;
import java.io.IOException;
import java.util.List;
//Java整合RocketMQ实现生产消费
//https://blog.csdn.net/qq_28314431/article/details/128452607
public class TestRocketMQ {
private final static String nameServer = "10.10.14.210:9876";
private final static String producerGroup = "my_group";
private final static String consumerGroup = "my_group";
private final static String topic = "topic-test";
//同步发送
public static void syncSend() {
try {
// 初始化一个producer并设置Producer group name
DefaultMQProducer producer = new DefaultMQProducer(producerGroup);
// 设置NameServer地址
producer.setNamesrvAddr(nameServer);
// 启动producer
producer.start();
// 创建一条消息并指定topic、tag、body等信息tag可以理解成标签对消息进行再归类RocketMQ可以在消费端对tag进行过滤
Message msg = new Message(topic, "tagA", "Hello RocketMQ".getBytes(RemotingHelper.DEFAULT_CHARSET));
// 利用producer进行发送并同步等待发送结果
SendResult sendResult = producer.send(msg, 10000);
System.out.printf("%s%n", sendResult);
// 一旦producer不再使用关闭producer
producer.shutdown();
} catch (Exception e) {
e.printStackTrace();
}
}
//异步发送
public static void asyncSend() throws IOException {
try {
// 初始化一个producer并设置Producer group name
DefaultMQProducer producer = new DefaultMQProducer(producerGroup);
// 设置NameServer地址
producer.setNamesrvAddr(nameServer);
// 启动producer
producer.start();
// 创建一条消息并指定topic、tag、body等信息tag可以理解成标签对消息进行再归类RocketMQ可以在消费端对tag进行过滤
Message msg = new Message(topic, "tagB", "Hello RocketMQ".getBytes(RemotingHelper.DEFAULT_CHARSET));
// 异步发送消息, 发送结果通过callback返回给客户端
producer.send(msg, new SendCallback() {
public void onSuccess(SendResult sendResult) {
System.out.printf("OK %s %n",
sendResult.getMsgId());
}
public void onException(Throwable e) {
System.out.printf("Exception %s %n", e);
e.printStackTrace();
}
}, 10000);
} catch (Exception e) {
e.printStackTrace();
}
System.in.read();
}
//顺序消息
public static void orderSend() {
try {
// 初始化一个producer并设置Producer group name
DefaultMQProducer producer = new DefaultMQProducer(producerGroup);
// 设置NameServer地址
producer.setNamesrvAddr(nameServer);
producer.setSendMsgTimeout(10000);
// 启动producer
producer.start();
String[] tags = new String[]{"TagA", "TagB", "TagC"};
for (int i = 0; i < 10; i++) {
int orderId = i % 10;
Message msg = new Message(topic, tags[i % tags.length], "KEY" + i, ("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET));
SendResult sendResult = producer.send(msg, new MessageQueueSelector() {
public MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) {
Integer id = (Integer) arg;
int index = id % mqs.size();
return mqs.get(index);
}
}, orderId);
System.out.printf("%s%n", sendResult);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void consumerPull() {
try {
DefaultLitePullConsumer consumer = new DefaultLitePullConsumer(consumerGroup);
consumer.setNamesrvAddr(nameServer);
//关闭自动提交
consumer.setAutoCommit(false);
consumer.subscribe(topic, "*");
consumer.setPullBatchSize(20);
consumer.start();
while (true) {
List<MessageExt> messageExts = consumer.poll();
if (messageExts.size() > 0) {
String str = new String(messageExts.get(0).getBody());
System.out.println(str);
} else {
System.out.println("本轮没有找到需要消费的消息!");
}
consumer.commitSync();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
//同步发送
syncSend();
//异步发送
//asyncSend();
//顺序消息
orderSend();
//拉消费
//consumerPull();
}
}

@ -0,0 +1,16 @@
# 官网
https://docmee.cn/
# 用户名与密码
18686619970
密码:手机验证码
# 体验
https://www.veasion.cn/AiPPT/
# 充值
https://open.docmee.cn/open/workspace/top-up
未充值
# 模板选择【展示】
https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202505131336410.png

@ -0,0 +1 @@
https://help.aliyun.com/zh/model-studio/emo-api?spm=a2c4g.11186623.help-menu-2400256.d_2_3_4_1.7d8a5f84mfOU9j

@ -0,0 +1,9 @@
# 可灵AI使用指南图片生成
https://docs.qingque.cn/d/home/eZQApd0EZqQHWXBEi7lL16_lD?identityId=26L1FFNIZ7r#section=h.60mmflz96wnl
# 可灵控制台
https://console-cn.klingai.com/console/expense-center/resource-pack-manage
# 登录
18686619970
获取验证码登录

@ -0,0 +1,39 @@
# 官网
https://www.liblib.art/apis
# 账号
18686619970
手机验证码登录
# 访问凭证
AK: sOCtVLVTNOZkRMajlhzCmg
SK: PUe8QTRG9i0G9EbpedHmIpLQ0FyxoYY9
# 接口文档
https://liblibai.feishu.cn/wiki/UAMVw67NcifQHukf8fpccgS5n6d
计划
API试用计划
到期时间
2025/05/22 23:59:59
剩余积分
500
购买积分
并发任务数
1个
# LiblibAI工作流
社区商用工作流和个人本地工作流均可支持调用。工作流挑选和商用查询可至https://www.liblib.art/workflows
# - 星流Star-3 Alpha适合对AI生图参数不太了解或不想复杂控制的用户。搭载自带LoRA推荐算法对自然语言的精准响应提供极致的图像质量能够生成具有照片级真实感的视觉效果不能自由添加LoRA仅支持部分ControlNet。生图效果可至星流官网https://xingliu.art/体验。
# - LiblibAI自定义模型若需要特定LoRA和ControlNet只能选此模式适合高度自由、精准控制和特定风格的场景基于F.1/XL/v3/v1.5等基础算法支持自定义调用LiblibAI内全量30万+可商用模型和任意私有模型。最新开源模型和插件第一时间更新。模型挑选和商用查询可至本文档3.1或https://www.liblib.art/。
# 参考文档
https://liblibai.feishu.cn/wiki/UAMVw67NcifQHukf8fpccgS5n6d
https://www.liblib.art/workflows

Binary file not shown.

After

Width:  |  Height:  |  Size: 891 KiB

@ -0,0 +1,3 @@
https://goapi.gptnb.ai/account/profile
littlehb
mdcija780522
Loading…
Cancel
Save