KouShenhai / KCloud-Platform-IoT

KCloud-Platform-IoT(阻塞式)(老寇IoT云平台)是一个企业级微服务架构的IoT云平台。采用DDD(领域驱动设计)思想,基于Spring Boot 3.4.0、Spring Cloud 2024.0.0、Spring Cloud Alibaba 2023.0.1.3 最新版本开发的云服务多租户IoT平台,家人们,点个star!拜托啦~
https://koushenhai.github.io/KCloud-Platform-IoT
Apache License 2.0
472 stars 120 forks source link

feat: 优化ws的例子,spring cloud升级至2024.0.0-RC1 #2883

Closed KouShenhai closed 3 days ago

KouShenhai commented 3 days ago

Sourcery的总结

通过引入新的消息类型和重构RocketMQ模板以支持各种消息发送方法,增强WebSocket示例。升级Spring Cloud到版本2024.0.0-RC1,并更新配置文件以提高系统性能和可维护性。

新功能:

增强:

构建:

文档:

Original summary in English ## Summary by Sourcery Enhance the WebSocket example by introducing new message types and refactoring the RocketMQ template to support various message sending methods. Upgrade Spring Cloud to version 2024.0.0-RC1 and update configuration files to improve system performance and maintainability. New Features: - Introduce new message types for WebSocket communication, including MESSAGE, CONNECT, PING, and PONG, to enhance interaction capabilities. - Add support for different message sending types in RocketMQ, including ASYNC, SYNC, ONE_WAY, and TRANSACTION, to provide more flexibility in message handling. Enhancements: - Refactor the RocketMqTemplate to include methods for sending one-way and synchronous messages, improving message handling capabilities. - Update the WebSocket server handler to process different message types and handle domain events more effectively. Build: - Upgrade Spring Cloud version to 2024.0.0-RC1 to leverage the latest features and improvements. Documentation: - Update the generated documentation timestamp to reflect the latest changes.

Summary by CodeRabbit

Release Notes

gitguardian[bot] commented 3 days ago

⚠️ GitGuardian has uncovered 2 secrets following the scan of your pull request.

Please consider investigating the findings and remediating the incidents. Failure to do so may lead to compromising the associated services or software components.

🔎 Detected hardcoded secrets in your pull request
| GitGuardian id | GitGuardian status | Secret | Commit | Filename | | | -------------- | ------------------ | ------------------------------ | ---------------- | --------------- | -------------------- | | [6970633](https://dashboard.gitguardian.com/workspace/369421/incidents/6970633?occurrence=170660892) | Triggered | Generic Password | e52afb6be0f7b637b15085a7111c20be77097652 | laokou-sample/laokou-sample-websocket/src/main/resources/application.yml | [View secret](https://github.com/KouShenhai/KCloud-Platform-IoT/commit/e52afb6be0f7b637b15085a7111c20be77097652#diff-4ac135f26a503b2d794459924489018451d2ae154950e5497bdd208c7788fc33R73) | | [6970633](https://dashboard.gitguardian.com/workspace/369421/incidents/6970633?occurrence=170660893) | Triggered | Generic Password | e52afb6be0f7b637b15085a7111c20be77097652 | laokou-sample/laokou-sample-websocket/src/main/resources/application.yml | [View secret](https://github.com/KouShenhai/KCloud-Platform-IoT/commit/e52afb6be0f7b637b15085a7111c20be77097652#diff-4ac135f26a503b2d794459924489018451d2ae154950e5497bdd208c7788fc33R58) |
🛠 Guidelines to remediate hardcoded secrets
1. Understand the implications of revoking this secret by investigating where it is used in your code. 2. Replace and store your secrets safely. [Learn here](https://blog.gitguardian.com/secrets-api-management?utm_source=product&utm_medium=GitHub_checks&utm_campaign=check_run_comment) the best practices. 3. Revoke and [rotate these secrets](https://docs.gitguardian.com/secrets-detection/secrets-detection-engine/detectors/generics/generic_password#revoke-the-secret?utm_source=product&utm_medium=GitHub_checks&utm_campaign=check_run_comment). 4. If possible, [rewrite git history](https://blog.gitguardian.com/rewriting-git-history-cheatsheet?utm_source=product&utm_medium=GitHub_checks&utm_campaign=check_run_comment). Rewriting git history is not a trivial act. You might completely break other contributing developers' workflow and you risk accidentally deleting legitimate data. To avoid such incidents in the future consider - following these [best practices](https://blog.gitguardian.com/secrets-api-management/?utm_source=product&utm_medium=GitHub_checks&utm_campaign=check_run_comment) for managing and storing secrets including API keys and other credentials - install [secret detection on pre-commit](https://docs.gitguardian.com/ggshield-docs/integrations/git-hooks/pre-commit?utm_source=product&utm_medium=GitHub_checks&utm_campaign=check_run_comment) to catch secret before it leaves your machine and ease remediation.

🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.

coderabbitai[bot] commented 3 days ago

[!CAUTION]

Review failed

The pull request is closed.

Walkthrough

The changes include updates to various files across the KCloud-Platform-IoT project. Key modifications involve updating dependency versions in the README.adoc, restructuring database sequences and tables in kcloud_platform_domain.sql, enhancing configuration properties in application.yml, and refactoring event handling in several Java classes. New classes and enums have been introduced, and existing methods have been modified to improve message handling and event processing. Additionally, documentation files have been updated to reflect the latest changes and timestamps.

Changes

File Change Summary
README.adoc Updated Netty dependency version from 4.1.113.Final to 4.1.115.Final.
doc/db/kcloud_platform_domain.sql Updated sequences and table structures, including new parameters for sequences and increased column lengths in boot_domain_event.
laokou-cloud/laokou-gateway/src/main/resources/application.yml Added username and password fields for Nacos configuration.
laokou-common/laokou-common-domain/src/main/java/org/laokou/common/domain/support/DomainEventPublisher.java Updated publish method signature to accept SendMessageType instead of a boolean.
laokou-common/laokou-common-domain/src/main/java/org/laokou/common/domain/support/RocketMQDomainEventPublisher.java Refactored publish method to handle multiple message types using SendMessageType.
laokou-common/laokou-common-i18n/src/main/java/org/laokou/common/i18n/common/constant/EventType.java Modified event types by removing CAPTCHA and API, adding SEND_CAPTCHA, NOTICE, and PUBLISH.
laokou-common/laokou-common-mybatis-plus/src/main/java/org/mybatis/spring/MyBatisExceptionTranslator.java Added @NonNullApi annotation and improved exception handling.
laokou-common/laokou-common-rocketmq/src/main/java/org/laokou/common/rocketmq/template/RocketMqTemplate.java Added new methods for sending messages and refactored existing ones for better message handling.
laokou-sample/laokou-sample-websocket/src/main/resources/application.yml Added Redis and dynamic datasource configurations.
laokou-service/laokou-auth/laokou-auth-app/src/main/java/org/laokou/auth/command/CaptchaSendCmdExe.java Updated event type from CAPTCHA to SEND_CAPTCHA and changed message sending strategy.
target/generated-docs/*.html Updated timestamps and added new lines for formatting in various documentation files.

Poem

In the land of code where rabbits play,
New features hop in, brightening the day.
With messages sent in styles anew,
And configurations fresh, oh what a view!
Dependencies dance, and events take flight,
Hooray for the changes, all feels just right! 🐇✨


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)
🪧 Tips ### Chat There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai): - Review comments: Directly reply to a review comment made by CodeRabbit. Example: - `I pushed a fix in commit , please review it.` - `Generate unit testing code for this file.` - `Open a follow-up GitHub issue for this discussion.` - Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples: - `@coderabbitai generate unit testing code for this file.` - `@coderabbitai modularize this function.` - PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples: - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.` - `@coderabbitai read src/utils.ts and generate unit testing code.` - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.` - `@coderabbitai help me debug CodeRabbit configuration file.` Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. ### CodeRabbit Commands (Invoked using PR comments) - `@coderabbitai pause` to pause the reviews on a PR. - `@coderabbitai resume` to resume the paused reviews. - `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository. - `@coderabbitai full review` to do a full review from scratch and review all the files again. - `@coderabbitai summary` to regenerate the summary of the PR. - `@coderabbitai resolve` resolve all the CodeRabbit review comments. - `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository. - `@coderabbitai help` to get help. ### Other keywords and placeholders - Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed. - Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description. - Add `@coderabbitai` anywhere in the PR title to generate the title automatically. ### CodeRabbit Configuration File (`.coderabbit.yaml`) - You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository. - Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information. - If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json` ### Documentation and Community - Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit. - Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback. - Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.
sourcery-ai[bot] commented 3 days ago

审核者指南由 Sourcery 提供

此 PR 引入了对 RocketMQ 消息系统和 WebSocket 实现的多项重要改进。更改包括新的消息类型系统、具有不同发送策略的增强型 RocketMQ 模板,以及具有结构化消息类型的改进型 WebSocket 消息处理。PR 还包括 Spring Cloud 升级到版本 2024.0.0-RC1。

WebSocket 消息处理的序列图

sequenceDiagram
    actor User
    participant WebSocketClient as WebSocket Client
    participant WebSocketServerHandler as WebSocketServerHandler
    participant RocketMQ as RocketMQ
    User->>WebSocketClient: Connect
    WebSocketClient->>WebSocketServerHandler: Send CONNECT message
    WebSocketServerHandler->>WebSocketServerHandler: Handle CONNECT
    WebSocketServerHandler->>RocketMQ: Publish CONNECT event
    WebSocketServerHandler->>WebSocketClient: Acknowledge connection
    User->>WebSocketClient: Send message
    WebSocketClient->>WebSocketServerHandler: Send MESSAGE
    WebSocketServerHandler->>WebSocketServerHandler: Handle MESSAGE
    WebSocketServerHandler->>RocketMQ: Publish MESSAGE event
    WebSocketServerHandler->>WebSocketClient: Acknowledge message received

RocketMqTemplate 增强的类图

classDiagram
    class RocketMqTemplate {
        -RocketMQTemplate rocketMQTemplate
        +<T> void sendOneWayMessage(String topic, String tag, T payload, String traceId, String spanId)
        +<T> void sendSyncMessage(String topic, String tag, T payload, String traceId, String spanId)
        +<T> void sendAsyncMessage(String topic, String tag, T payload, long timeout, String traceId, String spanId)
        +<T> void sendTransactionMessage(String topic, String tag, T payload, Long transactionId, String traceId, String spanId)
        -String getTopicTag(String topic, String tag)
        -<T> Message<T> buildMessage(String traceId, String spanId, Long transactionId, T payload)
        -<T> Message<T> buildMessage(String traceId, String spanId, T payload)
    }

新域事件和消息类型的类图

classDiagram
    class PublishMessageEvent {
        +PayloadCO co
        +PublishMessageEvent(String topic, String tag, PayloadCO co, String serviceId)
        +void generatorId()
    }
    class PayloadCO {
        +Set<String> receivers
        +String content
    }
    class SendMessageType {
        <<enumeration>>
        ASYNC
        SYNC
        ONE_WAY
        TRANSACTION
    }
    class MessageType {
        <<enumeration>>
        MESSAGE
        CONNECT
        PING
        PONG
    }

文件级更改

更改 详情 文件
增强的 RocketMQ 消息系统具有新的发送策略
  • 添加了新的消息发送类型:ONE_WAY、SYNC、ASYNC 和 TRANSACTION
  • 为火忘场景实现了新的 sendOneWayMessage 方法
  • 添加了 sendSyncMessage 方法用于同步消息传递
  • 将消息构建逻辑重构为单独的辅助方法
  • 更新了域事件发布器以支持不同的发送策略
laokou-common/laokou-common-rocketmq/src/main/java/org/laokou/common/rocketmq/template/RocketMqTemplate.java
laokou-common/laokou-common-rocketmq/src/main/java/org/laokou/common/rocketmq/template/SendMessageType.java
laokou-common/laokou-common-domain/src/main/java/org/laokou/common/domain/support/RocketMQDomainEventPublisher.java
改进的 WebSocket 实现具有结构化消息类型
  • 为不同类型的 WebSocket 消息引入了 MessageType 枚举
  • 添加了对 CONNECT、MESSAGE、PING 和 PONG 消息类型的支持
  • 在 WebSocketServerHandler 中实现了结构化消息处理
  • 更新了客户端 WebSocket 实现以使用新的消息结构
  • 为结构化消息内容添加了 PayloadCO
laokou-sample/laokou-sample-websocket/src/main/java/org/laokou/domain/model/MessageType.java
laokou-sample/laokou-sample-websocket/src/main/java/org/laokou/app/handler/WebSocketServerHandler.java
laokou-sample/laokou-sample-websocket/src/main/resources/templates/index.html
laokou-sample/laokou-sample-websocket/src/main/java/org/laokou/client/dto/clientobject/PayloadCO.java
增强的日志记录和配置
  • 添加了特定环境的 log4j2 配置
  • 使用 Redis 和数据库配置更新了 application.yml
  • 添加了 Nacos 用户名和密码配置
laokou-sample/laokou-sample-websocket/src/main/resources/log4j2-prod.xml
laokou-sample/laokou-sample-websocket/src/main/resources/log4j2-test.xml
laokou-sample/laokou-sample-websocket/src/main/resources/application.yml

提示和命令 #### 与 Sourcery 互动 - **触发新审核:** 在拉取请求上评论 `@sourcery-ai review`。 - **继续讨论:** 直接回复 Sourcery 的审核评论。 - **从审核评论生成 GitHub 问题:** 通过回复审核评论请求 Sourcery 从中创建问题。 - **生成拉取请求标题:** 在拉取请求标题的任何位置写 `@sourcery-ai` 以随时生成标题。 - **生成拉取请求摘要:** 在拉取请求正文的任何位置写 `@sourcery-ai summary` 以随时生成 PR 摘要。您还可以使用此命令指定摘要应插入的位置。 #### 自定义您的体验 访问您的[仪表板](https://app.sourcery.ai)以: - 启用或禁用审核功能,例如 Sourcery 生成的拉取请求摘要、审核者指南等。 - 更改审核语言。 - 添加、删除或编辑自定义审核说明。 - 调整其他审核设置。 #### 获取帮助 - 如有问题或反馈,请[联系我们的支持团队](mailto:support@sourcery.ai)。 - 访问我们的[文档](https://docs.sourcery.ai)以获取详细指南和信息。 - 通过关注我们在 [X/Twitter](https://x.com/SourceryAI)、[LinkedIn](https://www.linkedin.com/company/sourcery-ai/) 或 [GitHub](https://github.com/sourcery-ai) 上的 Sourcery 团队保持联系。
Original review guide in English ## Reviewer's Guide by Sourcery This PR introduces several significant improvements to the RocketMQ messaging system and WebSocket implementation. The changes include a new message type system, enhanced RocketMQ template with different sending strategies, and improved WebSocket message handling with structured message types. The PR also includes Spring Cloud upgrade to version 2024.0.0-RC1. #### Sequence diagram for WebSocket message handling ```mermaid sequenceDiagram actor User participant WebSocketClient as WebSocket Client participant WebSocketServerHandler as WebSocketServerHandler participant RocketMQ as RocketMQ User->>WebSocketClient: Connect WebSocketClient->>WebSocketServerHandler: Send CONNECT message WebSocketServerHandler->>WebSocketServerHandler: Handle CONNECT WebSocketServerHandler->>RocketMQ: Publish CONNECT event WebSocketServerHandler->>WebSocketClient: Acknowledge connection User->>WebSocketClient: Send message WebSocketClient->>WebSocketServerHandler: Send MESSAGE WebSocketServerHandler->>WebSocketServerHandler: Handle MESSAGE WebSocketServerHandler->>RocketMQ: Publish MESSAGE event WebSocketServerHandler->>WebSocketClient: Acknowledge message received ``` #### Class diagram for RocketMqTemplate enhancements ```mermaid classDiagram class RocketMqTemplate { -RocketMQTemplate rocketMQTemplate + void sendOneWayMessage(String topic, String tag, T payload, String traceId, String spanId) + void sendSyncMessage(String topic, String tag, T payload, String traceId, String spanId) + void sendAsyncMessage(String topic, String tag, T payload, long timeout, String traceId, String spanId) + void sendTransactionMessage(String topic, String tag, T payload, Long transactionId, String traceId, String spanId) -String getTopicTag(String topic, String tag) - Message buildMessage(String traceId, String spanId, Long transactionId, T payload) - Message buildMessage(String traceId, String spanId, T payload) } ``` #### Class diagram for new domain events and message types ```mermaid classDiagram class PublishMessageEvent { +PayloadCO co +PublishMessageEvent(String topic, String tag, PayloadCO co, String serviceId) +void generatorId() } class PayloadCO { +Set receivers +String content } class SendMessageType { <> ASYNC SYNC ONE_WAY TRANSACTION } class MessageType { <> MESSAGE CONNECT PING PONG } ``` ### File-Level Changes | Change | Details | Files | | ------ | ------- | ----- | | Enhanced RocketMQ messaging system with new sending strategies |
  • Added new message sending types: ONE_WAY, SYNC, ASYNC, and TRANSACTION
  • Implemented new sendOneWayMessage method for fire-and-forget scenarios
  • Added sendSyncMessage method for synchronous message delivery
  • Refactored message building logic into separate helper methods
  • Updated domain event publisher to support different sending strategies
| `laokou-common/laokou-common-rocketmq/src/main/java/org/laokou/common/rocketmq/template/RocketMqTemplate.java`
`laokou-common/laokou-common-rocketmq/src/main/java/org/laokou/common/rocketmq/template/SendMessageType.java`
`laokou-common/laokou-common-domain/src/main/java/org/laokou/common/domain/support/RocketMQDomainEventPublisher.java` | | Improved WebSocket implementation with structured message types |
  • Introduced MessageType enum for different types of WebSocket messages
  • Added support for CONNECT, MESSAGE, PING, and PONG message types
  • Implemented structured message handling in WebSocketServerHandler
  • Updated client-side WebSocket implementation to use new message structure
  • Added PayloadCO for structured message content
| `laokou-sample/laokou-sample-websocket/src/main/java/org/laokou/domain/model/MessageType.java`
`laokou-sample/laokou-sample-websocket/src/main/java/org/laokou/app/handler/WebSocketServerHandler.java`
`laokou-sample/laokou-sample-websocket/src/main/resources/templates/index.html`
`laokou-sample/laokou-sample-websocket/src/main/java/org/laokou/client/dto/clientobject/PayloadCO.java` | | Enhanced logging and configuration |
  • Added environment-specific log4j2 configurations
  • Updated application.yml with Redis and database configurations
  • Added Nacos username and password configurations
| `laokou-sample/laokou-sample-websocket/src/main/resources/log4j2-prod.xml`
`laokou-sample/laokou-sample-websocket/src/main/resources/log4j2-test.xml`
`laokou-sample/laokou-sample-websocket/src/main/resources/application.yml` | ---
Tips and commands #### Interacting with Sourcery - **Trigger a new review:** Comment `@sourcery-ai review` on the pull request. - **Continue discussions:** Reply directly to Sourcery's review comments. - **Generate a GitHub issue from a review comment:** Ask Sourcery to create an issue from a review comment by replying to it. - **Generate a pull request title:** Write `@sourcery-ai` anywhere in the pull request title to generate a title at any time. - **Generate a pull request summary:** Write `@sourcery-ai summary` anywhere in the pull request body to generate a PR summary at any time. You can also use this command to specify where the summary should be inserted. #### Customizing Your Experience Access your [dashboard](https://app.sourcery.ai) to: - Enable or disable review features such as the Sourcery-generated pull request summary, the reviewer's guide, and others. - Change the review language. - Add, remove or edit custom review instructions. - Adjust other review settings. #### Getting Help - [Contact our support team](mailto:support@sourcery.ai) for questions or feedback. - Visit our [documentation](https://docs.sourcery.ai) for detailed guides and information. - Keep in touch with the Sourcery team by following us on [X/Twitter](https://x.com/SourceryAI), [LinkedIn](https://www.linkedin.com/company/sourcery-ai/) or [GitHub](https://github.com/sourcery-ai).
sonarcloud[bot] commented 3 days ago

Quality Gate Failed Quality Gate failed

Failed conditions
E Security Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE