目次
1: Kafka メッセージ送信のクイック スタート
1. 文字列メッセージを渡す
(1) メッセージの送信
(2) メッセージをリッスンする
(3) テスト結果
2. オブジェクト メッセージの受け渡し
(1) プロデューサコードを変更します
(2) 結果テスト
2: 機能紹介
1. 要件分析
#2. 論理分析
3: 早期の準備
1.依存関係の導入
2.定数の定義
3.Kafka設定情報
4: コード実装
1. セルフメディア端末
2. モバイル端末
ホームページ Java &#&チュートリアル Springboot マイクロサービス プロジェクトが Kafka を統合して記事のアップロード機能とリストから削除する機能を実装する方法

Springboot マイクロサービス プロジェクトが Kafka を統合して記事のアップロード機能とリストから削除する機能を実装する方法

May 16, 2023 pm 08:52 PM
springboot kafka

1: Kafka メッセージ送信のクイック スタート

1. 文字列メッセージを渡す

(1) メッセージの送信

コントローラー パッケージを作成し、送信用のテスト クラスを作成します。メッセージ

package com.my.kafka.controller;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
public class HelloController {
    @Autowired
    private KafkaTemplate<String,String> kafkaTemplate;
 
    @GetMapping("hello")
    public String helloProducer(){
        kafkaTemplate.send("my-topic","Hello~");
        return "ok";
    }
}
ログイン後にコピー
(2) メッセージをリッスンする

メッセージを受信するテスト クラスを作成します:

package com.my.kafka.listener;
 
import org.junit.platform.commons.util.StringUtils;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
 
@Component
public class HelloListener {
    @KafkaListener(topics = "my-topic")
    public void helloListener(String message) {
        if(StringUtils.isNotBlank(message)) {
            System.out.println(message);
        }
    }
}
ログイン後にコピー
(3) テスト結果

ブラウザ入力 localhost を開きます:9991/hello, and then go to the console to view the message. 成功したメッセージが監視され、消費されていることがわかります。

Springboot マイクロサービス プロジェクトが Kafka を統合して記事のアップロード機能とリストから削除する機能を実装する方法

2. オブジェクト メッセージの受け渡し

現在 Springboot には Kafka が統合されており、シリアライザーは StringSerializer であるため、この時点でオブジェクトを渡す必要がある場合は、次の 2 つがあります。方法 方法:

方法 1: 多くのオブジェクト タイプでシリアライザーをカスタマイズできますが、この方法はあまり汎用性が高くないため、ここでは紹介しません。

方法2: 転送するオブジェクトをjson文字列に変換し、メッセージ受信後にオブジェクトに変換する方法 本プロジェクトではこの方法を使用します。

(1) プロデューサコードを変更します
@GetMapping("hello")
public String helloProducer(){
    User user = new User();
    user.setName("赵四");
    user.setAge(20);
    kafkaTemplate.send("my-topic", JSON.toJSONString(user));
    return "ok";
}
ログイン後にコピー
(2) 結果テスト

Springboot マイクロサービス プロジェクトが Kafka を統合して記事のアップロード機能とリストから削除する機能を実装する方法

すべてのオブジェクトパラメータが正常に受信されたことがわかります。 , 後で このオブジェクトを使用するには、それを User オブジェクトに変換するだけです。

2: 機能紹介

1. 要件分析

記事公開後、記事に誤り等がある場合がございます。記事管理側のアップロード・削除機能(下図参照)、つまり管理端末が商品棚から商品を削除すると、モバイル端末にはその商品が表示されなくなり、再出品して初めて商品が表示されます。記事情報をモバイル端末でもご覧いただけます。

Springboot マイクロサービス プロジェクトが Kafka を統合して記事のアップロード機能とリストから削除する機能を実装する方法

#2. 論理分析

Springboot マイクロサービス プロジェクトが Kafka を統合して記事のアップロード機能とリストから削除する機能を実装する方法

#フロントエンドから渡されたパラメータをバックエンドが受け取った後、最初に検証を行う必要があります。実行を続行する前にパラメータが空ではありません。まず、フロントエンドから渡された記事 ID (セルフメディア エンド記事 ID) に基づいてセルフメディア データベースの記事情報をクエリする必要があります。レビューのみが成功し成功するため、記事が公開されたかどうかを判断します。アップロードまたは削除できるのは公開された記事のみです。セルフメディア側のマイクロサービスが記事のアップロードとリスト解除のステータスを変更した後、Kafka にメッセージを送信できます。メッセージは Map オブジェクトです。そこに格納されるデータは、モバイル端末の記事 ID と渡されたenable パラメータです。もちろん、このメッセージは、Map オブジェクトを JSON 文字列に変換して送信できます。

記事マイクロサービスは、Kafka によって送信されたメッセージをリッスンし、JSON 文字列を Map オブジェクトに変換し、関連するパラメーターを取得して、モバイル記事のアップとダウンのステータスを変更します。

3: 早期の準備

1.依存関係の導入

<!-- kafkfa -->
<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
</dependency>
ログイン後にコピー

2.定数の定義

package com.my.common.constans;
public class WmNewsMessageConstants {
    public static final String WM_NEWS_UP_OR_DOWN_TOPIC="wm.news.up.or.down.topic";
}
ログイン後にコピー

3.Kafka設定情報

理由Nacos を登録センターとして使用しているため、構成情報は Nacos に置くことができます。

(1) セルフメディア端末の構成

spring:
  kafka:
    bootstrap-servers: 4.234.52.122:9092
    producer:
      retries: 10
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
ログイン後にコピー

(2) モバイル端末の構成

spring:
  kafka:
    bootstrap-servers: 4.234.52.122:9092
    consumer:
      group-id: ${spring.application.name}-test
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
ログイン後にコピー

4: コード実装

1. セルフメディア端末

@Autowired
private KafkaTemplate<String,String> kafkaTemplate;
/**
 * 文章下架或上架
 * @param id
 * @param enable
 * @return
 */
@Override
public ResponseResult downOrUp(Integer id,Integer enable) {
    log.info("执行文章上下架操作...");
    if(id == null || enable == null) {
        return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
    }
    //根据id获取文章
    WmNews news = getById(id);
    if(news == null) {
        return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST,"文章信息不存在");
    }
    //获取当前文章状态
    Short status = news.getStatus();
    if(!status.equals(WmNews.Status.PUBLISHED.getCode())) {
        return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID,"文章非发布状态,不能上下架");
    }
 
    //更改文章状态
    news.setEnable(enable.shortValue());
    updateById(news);
    log.info("更改文章上架状态{}-->{}",status,news.getEnable());
 
    //发送消息到Kafka
    Map<String, Object> map = new HashMap<>();
    map.put("articleId",news.getArticleId());
    map.put("enable",enable.shortValue());
    kafkaTemplate.send(WmNewsMessageConstants.WM_NEWS_UP_OR_DOWN_TOPIC,JSON.toJSONString(map));
    log.info("发送消息到Kafka...");
 
    return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
}
ログイン後にコピー

2. モバイル端末

(1) リスナーの設定

package com.my.article.listener;
 
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.my.article.service.ApArticleService;
import com.my.common.constans.WmNewsMessageConstants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.kafka.annotation.KafkaListener;
 
 
@Slf4j
@Component
public class EnableListener {
    @Autowired
    private ApArticleService apArticleService;
 
    @KafkaListener(topics = WmNewsMessageConstants.WM_NEWS_UP_OR_DOWN_TOPIC)
    public void downOrUp(String message) {
        if(StringUtils.isNotBlank(message)) {
            log.info("监听到消息{}",message);
            apArticleService.downOrUp(message);
        }
    }
}
ログイン後にコピー

(2) メッセージの取得と記事ステータスの変更

/**
* 文章上下架
* @param message
* @return
*/
@Override
public ResponseResult downOrUp(String message) {
    Map map = JSON.parseObject(message, Map.class);
    //获取文章id
    Long articleId = (Long) map.get("articleId");
    //获取文章待修改状态
    Integer enable = (Integer) map.get("enable");
    //查询文章配置
    ApArticleConfig apArticleConfig = apArticleConfigMapper.selectOne
            (Wrappers.<ApArticleConfig>lambdaQuery().eq(ApArticleConfig::getArticleId, articleId));
    if(apArticleConfig != null) {
        //上架
        if(enable == 1) {
            log.info("文章重新上架");
            apArticleConfig.setIsDown(false);
            apArticleConfigMapper.updateById(apArticleConfig);
        }
        //下架
        if(enable == 0) {
            log.info("文章下架");
            apArticleConfig.setIsDown(true);
            apArticleConfigMapper.updateById(apArticleConfig);
        }
    }
    else {
        throw new RuntimeException("文章信息不存在");
    }
    return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
}
ログイン後にコピー

以上がSpringboot マイクロサービス プロジェクトが Kafka を統合して記事のアップロード機能とリストから削除する機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP と Kafka を使用してリアルタイム株価分析を実装する方法 PHP と Kafka を使用してリアルタイム株価分析を実装する方法 Jun 28, 2023 am 10:04 AM

インターネットとテクノロジーの発展に伴い、デジタル投資への関心が高まっています。多くの投資家は、より高い投資収益率を得ることを期待して、投資戦略を模索し、研究し続けています。株式取引では、リアルタイムの株式分析が意思決定に非常に重要であり、Kafka のリアルタイム メッセージ キューと PHP テクノロジの使用は効率的かつ実用的な手段です。 1. Kafka の概要 Kafka は、LinkedIn によって開発された高スループットの分散型パブリッシュおよびサブスクライブ メッセージング システムです。 Kafka の主な機能は次のとおりです。

SpringBootとSpringMVCの比較と差異分析 SpringBootとSpringMVCの比較と差異分析 Dec 29, 2023 am 11:02 AM

SpringBoot と SpringMVC はどちらも Java 開発で一般的に使用されるフレームワークですが、それらの間には明らかな違いがいくつかあります。この記事では、これら 2 つのフレームワークの機能と使用法を調べ、その違いを比較します。まず、SpringBoot について学びましょう。 SpringBoot は、Spring フレームワークに基づいたアプリケーションの作成と展開を簡素化するために、Pivo​​tal チームによって開発されました。スタンドアロンの実行可能ファイルを構築するための高速かつ軽量な方法を提供します。

Kafkaを探索するための可視化ツール5選 Kafkaを探索するための可視化ツール5選 Feb 01, 2024 am 08:03 AM

Kafka 視覚化ツールの 5 つのオプション ApacheKafka は、大量のリアルタイム データを処理できる分散ストリーム処理プラットフォームです。これは、リアルタイム データ パイプライン、メッセージ キュー、イベント駆動型アプリケーションの構築に広く使用されています。 Kafka の視覚化ツールは、ユーザーが Kafka クラスターを監視および管理し、Kafka データ フローをより深く理解するのに役立ちます。以下は、5 つの人気のある Kafka 視覚化ツールの紹介です。 ConfluentControlCenterConfluent

Kafka 視覚化ツールの比較分析: 最適なツールを選択するには? Kafka 視覚化ツールの比較分析: 最適なツールを選択するには? Jan 05, 2024 pm 12:15 PM

適切な Kafka 視覚化ツールを選択するにはどうすればよいですか? 5 つのツールの比較分析 はじめに: Kafka は、ビッグ データの分野で広く使用されている、高性能、高スループットの分散メッセージ キュー システムです。 Kafka の人気に伴い、Kafka クラスターを簡単に監視および管理するためのビジュアル ツールを必要とする企業や開発者が増えています。この記事では、読者がニーズに合ったツールを選択できるように、一般的に使用される 5 つの Kafka 視覚化ツールを紹介し、その特徴と機能を比較します。 1.カフカマネージャー

SpringBoot+Dubbo+Nacos開発実践チュートリアル SpringBoot+Dubbo+Nacos開発実践チュートリアル Aug 15, 2023 pm 04:49 PM

この記事では、dubbo+nacos+Spring Boot の実際の開発について詳しく説明する例を書きます。この記事では理論的な知識はあまり取り上げませんが、dubbo を nacos と統合して開発環境を迅速に構築する方法を説明する最も簡単な例を書きます。

Rocky Linux に Apache Kafka をインストールするにはどうすればよいですか? Rocky Linux に Apache Kafka をインストールするにはどうすればよいですか? Mar 01, 2024 pm 10:37 PM

RockyLinux に ApacheKafka をインストールするには、次の手順に従います。 システムの更新: まず、RockyLinux システムが最新であることを確認し、次のコマンドを実行してシステム パッケージを更新します: sudoyumupdate Java のインストール: ApacheKafka は Java に依存しているため、最初に JavaDevelopmentKit (JDK) をインストールします)。 OpenJDK は、次のコマンドを使用してインストールできます。 sudoyuminstalljava-1.8.0-openjdk-devel ダウンロードして解凍します。 ApacheKafka 公式 Web サイト () にアクセスして、最新のバイナリ パッケージをダウンロードします。安定したバージョンを選択してください

springBoot プロジェクトで一般的に使用されるディレクトリは何ですか? springBoot プロジェクトで一般的に使用されるディレクトリは何ですか? Jun 27, 2023 pm 01:42 PM

SpringBootプロジェクトでよく使われるディレクトリ SpringBoot開発時のディレクトリ構成と命名仕様を基に、SpringBootプロジェクトのディレクトリ構成と命名仕様を紹介します 導入を通じて問題解決をお手伝いします 実際のディレクトリ構成の計画方法プロジェクト?ディレクトリにもっと標準化された名前を付けるにはどうすればよいでしょうか?各ディレクトリは何を意味しますか? 3 つの質問をお待ちください。ディレクトリの説明 servicex//プロジェクト名|-admin-ui//管理サービス フロントエンド コード (通常、管理を容易にするために、UI とサービスは 1 つのプロジェクトにまとめられます)|-servicex-auth//モジュール 1|-servicex-common//モジュール 2|-servicex-gateway//モジュール 3|

go-zero と Kafka+Avro の実践: 高性能対話型データ処理システムの構築 go-zero と Kafka+Avro の実践: 高性能対話型データ処理システムの構築 Jun 23, 2023 am 09:04 AM

近年、ビッグ データと活発なオープン ソース コミュニティの台頭により、ますます多くの企業が増大するデータ ニーズを満たすために高性能の対話型データ処理システムを探し始めています。このテクノロジー アップグレードの波の中で、go-zero と Kafka+Avro はますます多くの企業に注目され、採用されています。 go-zero は、Golang 言語をベースに開発されたマイクロサービス フレームワークで、高いパフォーマンス、使いやすさ、拡張の容易さ、メンテナンスの容易さという特徴を備えており、企業が効率的なマイクロサービス アプリケーション システムを迅速に構築できるように設計されています。その急速な成長

See all articles