著者は、正確なタイミングタスクと遅延キュー処理機能を備えた、高い同時実行シナリオの下で、シンプルで安定したスケーラブルな遅延[メッセージキュー](https://cloud.tencent.com/product/cmq?from=10680)フレームワークを個人的に開発しました。半年以上のオープンソース以来、それは十数以上の中小企業に正確なタイミングスケジューリングソリューションを提供することに成功し、生産環境のテストに耐えてきました。より多くの子供たちの靴に利益をもたらすために、オープンソースフレームワークのアドレスが与えられました:
https://github.com/sunshinelyz/mykit-delay
PS:スターソースコードへようこそ。素晴らしいコードを作成することもできます。
「[** [FastDFS]の友人は、CentOS 8サーバーでFastDFS環境を構築すると、常にエラーが報告されると言っていましたか? ](https://mp.weixin.qq.com/s?__biz=Mzg3MzE1NTIzNA==&mid=2247487776&idx=1&sn=f2e97296f36c52d94c8dfa3f0f1292c1&chksm=cee50eedf99287fbac48600cfd56ad0401a407838790e403174720f05ce38826c31bbc09aa68&token=904797872&lang=zh_CN&scene=21#wechat_redirect) "および" [ [FastDFS]インタビュアー:ファイルの大規模な分散ストレージを実現するにはどうすればよいですか? (プロセス全体の実際の戦闘)**](https://mp.weixin.qq.com/s?__biz=Mzg3MzE1NTIzNA==&mid=2247487844&idx=1&sn=0b03128d431f2af5e742852d6ba65a6c&chksm=cee50ea9f99287bf4a25df26970aa78bba33f801364c0ce55897f1351af89c7a0b50006e76ae&token=904797872&lang=zh_CN&scene=21#wechat_redirect)」の記事では、FastDFS環境を詳細にセットアップしました。では、環境が整ったので、FastDFSをプロジェクトに統合するにはどうすればよいでしょうか。今日は、この問題について一緒に話します。
注:プロジェクトのソースコードは、https://github.com/sunshinelyz/mykit-fastdfsに送信されています。
FastDFSの公式Githubには、FastDFS Javaクライアントプロジェクトがあり、リンクアドレスはhttps://github.com/happyfish100/fastdfs-client-javaです。
以下に示すように、Javaクライアントコードをローカルにダウンロードしてから、プロジェクトディレクトリに入り、Mavenを使用してコンパイルします。
git clone https://github.com/happyfish100/fastdfs-client-java.git
cd fastdfs-client-java
mvn clean install -Dmaven.test.skip=true
次に、FastDFSJavaクライアントをコンパイルしてローカルのMavenリポジトリにインストールする必要があります。
mvn install:install-file -DgroupId=com.fastdfs -DartifactId=fastdfs-client-java -Dversion=1.29-Dpackaging=jar -Dfile=fastdfs-client-java-1.29-SNAPSHOT.jar
この時点で、FastDFSのJavaクライアントをローカルにコンパイルしてインストールしました。
IDEAでMavenプロジェクトを作成し、SpringBoot関連の依存関係と独自にコンパイルしたFastDFSJavaクライアントをpom.xmlファイルに導入します。最後に、pom.xmlファイルの依存関係は次のとおりです。
< properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><skip_maven_deploy>false</skip_maven_deploy><java.version>1.8</java.version><logback.version>1.1.7</logback.version><slf4j.version>1.7.21</slf4j.version><common.logging>1.2</common.logging><fastjson.version>1.2.51</fastjson.version><fastdfs.client.version>1.29</fastdfs.client.version></properties><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.6.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-undertow</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>${common.logging}</version></dependency><!-- log --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>${logback.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency><dependency><groupId>com.fastdfs</groupId><artifactId>fastdfs-client-java</artifactId><version>${fastdfs.client.version}</version></dependency></dependencies>
(1)プロジェクトのsrc / main / resourcesディレクトリにSpringBoot構成ファイルapplication.ymlを作成します。ファイルの内容は次のとおりです。
server:
port:9999
servlet:
context-path:/resource
tomcat:
uri-encoding: UTF-8
spring:
servlet:
multipart:
max-file-size: 1024MB
max-request-size: 1024MB
main:
allow-bean-definition-overriding:true
profiles:
include: test
active: test
output:
ansi:
enabled: detect
このファイルは、プロジェクトの開始後に監視するポート、アクセスのルートパス、プロジェクトコード、ファイルアップロードのサイズ、およびランタイム環境を指定します。
(2)プロジェクトのsrc / main / resourcesディレクトリにlogback-spring.xmlログファイルを作成します。特定の構成については、ソースコードプロジェクトを参照してください。
(3)プロジェクトのsrc / main / resourcesディレクトリにfastdfs_client.confファイルを作成します。これは、主にFastDFSとの接続情報を構成するために使用されます。
connect_timeout =200
network_timeout =3000
charset = UTF-8
http.tracker_http_port =8080
http.anti_steal_token = no
http.secret_key = FastDFS1234567890
tracker_server =192.168.175.100:22122
この時点で、プロジェクトは完了です。次に、プロジェクトの機能を一緒に実装します。
まず、プロジェクトのio.mykit.fastdfs.utilsパッケージの下にFastDFSClientUtilsツールクラスを作成します。ここでは、ツールクラスのコア実装について説明します。他の友人については、ソースコードプロジェクトを参照してください。
/**
* @ author binghe
* @ 説明FastDFS分散ファイルシステム操作クライアント
* /publicclassFastDFSClientUtils{privatestatic Logger logger = LoggerFactory.getLogger(FastDFSClientUtils.class);privatestatic TrackerClient trackerClient;publicstaticvoidsetFile(String filePath){try{
logger.info("分散ファイルシステムサービスの開始を初期化します...");if(filePath ==null|| filePath.trim().isEmpty()){
filePath ="fastdfs_client.conf";}
ClientGlobal.init(filePath);
TrackerGroup trackerGroup = ClientGlobal.g_tracker_group;
trackerClient =newTrackerClient(trackerGroup);
logger.info("完了した分散ファイルシステムサービスの初期化...");}catch(Exception e){
logger.error("ファイル読み込みの例外:{}",e );}}/**
* @ パラメータデータ
* @ paramextNameファイル拡張子
* @ アップロードが成功した場合はリターンIDを返し、失敗した場合はnullを返します。
* /publicstatic String upload(byte[] data, String extName){
TrackerServer trackerServer =null;
StorageServer storageServer =null;
StorageClient1 storageClient1 =null;try{
NameValuePair[] meta_list =null;// new NameValuePair[0];
trackerServer = trackerClient.getTrackerServer();if(trackerServer ==null){
logger.error("getConnection return null");}
storageServer = trackerClient.getStoreStorage(trackerServer);
storageClient1 =newStorageClient1(trackerServer, storageServer);
String fileid = storageClient1.upload_file1(data, extName, meta_list);return fileid;}catch(Exception ex){
logger.error("ファイルアップロードの例外:{}", ex);returnnull;}finally{try{
storageClient1.close();}catch(IOException e){
e.printStackTrace();}
storageClient1 =null;}}
以下に示すように、SpringBootインターフェイスが結果データを返すためにio.mykit.fastdfs.beanパッケージの下にResourceBeanクラスを作成します。
/**
* @ author binghe
* @ version 1.0.0
* @ 説明画像をアップロードした後にデータを返す
* /publicclassResourceBeanimplementsSerializable{privatestatic final long serialVersionUID =-2788538880352897307L;/**
* ファイルアクセスパス
* /private String fileUrl;/**
* ファイル名
* /private String fileName;publicResourceBean(){super();}publicResourceBean(String fileUrl, String fileName){super();this.fileUrl = fileUrl;this.fileName = fileName;}public String getFileUrl(){return fileUrl;}publicvoidsetFileUrl(String fileUrl){this.fileUrl = fileUrl;}public String getFileName(){return fileName;}publicvoidsetFileName(String fileName){this.fileName = fileName;}}
その中で、ファイルのアクセスパスfileUrlとファイルfileNameの名前が定義されています。つまり、ファイルが正常にアップロードされた後、ファイルアクセスパスとファイル名の情報をクライアントに返します。
io.mykit.fastdfs.constantsパッケージの下にResourcesConstants定数クラスを作成します。ResourcesConstantsクラスは、主に、以下に示すように、ファイルにアクセスするための基本パスと、ファイルの完全なアクセスパスを取得する方法を定義します。
/**
* @ author binghe
* @ version 1.0.0
* @ 説明定数
* /publicclassResourcesConstants{privatestatic final String BASE_RESOURCES_URL ="http://192.168.175.100/";publicstatic String getResourcesUrl(String fileId){return BASE_RESOURCES_URL.concat(fileId);}}
プロジェクトのio.mykit.fastdfs.controllerパッケージの下にResourceControllerクラスを作成して、ファイルアップロードのインターフェイスを定義します。このクラスの機能も比較的単純です。つまり、以下に示すように、ファイルアップロードインターフェイスを定義し、ファイルを受信し、FastDFSClientUtilsツールクラスのupload(byte []、String)メソッドを呼び出してファイルをFastDFSにアップロードします。
/**
* @ author binghe
* @ version 1.0.0
* @ 説明アップロードファイルインターフェイス
* /
@ RestController
@ RequestMapping(value ="/resources/")publicclassResourceController{
@ RequestMapping(value={"/upload"}, method=RequestMethod.POST)
@ ResponseBody
public ResourceBean upload(@RequestParam("file") MultipartFile file, HttpServletRequest request, HttpServletResponse response){
String extName ="";
String fileName ="";
String originalFilename = file.getOriginalFilename();if(originalFilename.contains(".")){//分割ファイルパス
String[] fileArray = originalFilename.split("\\.");//ファイル拡張子を取得する
extName = fileArray[1];//ファイル名を取得する
fileName = fileArray[0];}else{
fileName = originalFilename;}
byte[] bytes =null;try{
bytes = file.getBytes();//ファイルをバイトストリーム形式に変換します}catch(IOException e){
e.printStackTrace();}//ファイルをアップロードする特定のメソッドを呼び出す
String fileId= FastDFSClientUtils.upload(bytes,extName);returnnewResourceBean(ResourcesConstants.getResourcesUrl(fileId), fileName);}}
プロジェクトのio.mykit.fastdfsパッケージの下に、以下に示すように、プロジェクト起動クラスResourceStarterを作成します。
/**
* @ author binghe
* @ version 1.0.0
* @ 説明開始
* /
@ SpringBootApplication
publicclassResourceStarter{publicstaticvoidmain(String[] args){try{
String filePath ="fastdfs_client.conf";if(args.length >0){
filePath = args[0];}
FastDFSClientUtils.setFile(filePath);
SpringApplication.run(ResourceStarter.class, args);}catch(Exception e){// TODO Auto-generated catch block
e.printStackTrace();}}}
コードからわかるように、ResourceStarterスタートアップクラスのmainメソッドでは、filePath変数のデフォルトのファイルパスがfastdfs_client.confとして定義されています。プロジェクトが開始されると、パラメーターがmain()メソッドに渡され、最初のパラメーターが使用されます。 filePathのデフォルト値をオーバーライドし、FastDFSClientUtilsクラスのsetFile()メソッドを呼び出して、初期化のためにfilePathをFastDFSClientUtilsクラスに渡します。
最後に、ファイルのアップロード操作をテストするためにindex.htmlファイルを作成する必要があります。以下に示すように、index.htmlファイルの内容も比較的単純です。
<! DOCTYPE html><html><head><meta charset="utf-8"><title>ファイルのアップロードとダウンロード</title></head><body><form action='http://192.168.175.100:9999/resource/resources/upload' method='post' enctype='multipart/form-data'><input type='file' name='file'><button type='submit'>アップロード</button></form></body></html>
この時点で、プロジェクト全体が開発されました。
まず、mykit-fastdfsプロジェクトをIDEAのmykit-fastdfs.jarファイルにパッケージ化し、次にmykit-fastdfs.jarファイルをサーバーの/ usr / local / javaディレクトリにアップロードします。同時に、プロジェクトのsrc / mainを追加します。 / resourcesディレクトリのfastdfs_client.confファイルをサーバーの/ usr / local / javaディレクトリにコピーします。
サーバーコマンドラインで次のコマンドを入力して、mykit-fastdfs.jarを起動します。
nohup java -jar /usr/local/java/mykit-fastdfs.jar /usr/local/java/fastdfs_client.conf >>/dev/null&
次に、index.htmlファイルをNginxインストールディレクトリの下のhtml / testディレクトリに配置します。この時点で、ブラウザのアドレスバーにhttp://192.168.175.100/test/index.htmlと入力して、ページを開きます。
以下に示すように、index.htmlページを介してファイルをFastDFSファイルシステムにアップロードすると、ブラウザに返された結果データが表示されます。1つはファイルのアクセスパスfileUrlで、もう1つはファイル名fileNameです。
{" fileUrl":"http://192.168.175.100/group1/M00/00/00/Ch8FQl9wfkSASTnYAACSPnJ7giA366.jpg","fileName":"QQスクリーンショット20200609234534"}
詳細を下図に示します。

以下に示すように、fileUrl(http://192.168.175.100/group1/M00/00/00/Ch8FQl9wfkSASTnYAACSPnJ7giA366.jpg)で識別されるファイルアクセスパスを開きます。

ご覧のとおり、ブラウザはアップロードされた画像を正しく表示できます。これは、FastDFSJavaクライアントがプロジェクトに正常に統合されたことを示しています。
Recommended Posts