最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA接入DeepSeek滿血版的詳細(xì)指南(問答接入、流式接入雙模式)

 更新時(shí)間:2025年03月13日 09:44:55   作者:小滿他爹  
硅基流動(dòng)推出了功能完備的DeepSeek滿血版,然而眾多用戶在嘗試接入大型模型時(shí)仍面臨諸多挑戰(zhàn),特別是在流式接入方面,今天,我將引領(lǐng)大家通過Java實(shí)現(xiàn)雙模式接入DeepSeek滿血版,需要的朋友可以參考下

前言

硅基流動(dòng)推出了功能完備的DeepSeek滿血版,然而眾多用戶在嘗試接入大型模型時(shí)仍面臨諸多挑戰(zhàn),特別是在流式接入方面。今天,我將引領(lǐng)大家通過Java實(shí)現(xiàn)雙模式接入DeepSeek滿血版,這涵蓋了利用HTTP協(xié)議實(shí)現(xiàn)的問答模式,以及借助WSS協(xié)議實(shí)現(xiàn)的流式問答功能。話不多說,我們直接開始。

一、必要信息準(zhǔn)備

接入滿血版DeepSeek,肯定要有個(gè)硅基流動(dòng)賬號(hào)和秘鑰啦,搜索一下硅基流動(dòng)官網(wǎng),打開硅基流動(dòng)首頁(yè),注冊(cè)賬號(hào),別忘了填邀請(qǐng)碼wkzJFskh,注冊(cè)后可以獲取14元的贈(zèng)送額度,嫌麻煩的同學(xué)可以直接復(fù)制https://cloud.siliconflow.cn/i/wkzJFskh,可以直接跳轉(zhuǎn)到官網(wǎng)。

注冊(cè)完成后,左側(cè)菜單欄點(diǎn)擊API秘鑰,然后選擇右上角的創(chuàng)建秘鑰,輸入必要信息后,秘鑰創(chuàng)建完成,鼠標(biāo)點(diǎn)擊剛剛創(chuàng)建的秘鑰,單擊復(fù)制,這一步可以先把秘鑰用個(gè)記事本記錄一下,等會(huì)代碼里會(huì)用到。

點(diǎn)擊左側(cè)模型廣場(chǎng),選取DeepSeekR1滿血版模型,可以看到,廣場(chǎng)里面有很多小模型是免費(fèi)的,大家有空可以都嘗試玩一下。

復(fù)制一下模型名稱,寫在記事本里,等會(huì)會(huì)用到。點(diǎn)擊API文檔,進(jìn)入官方接入指南。

記住這邊的路徑,請(qǐng)求以及響應(yīng),下面要開始代碼部分啦。

二、HTTP問答接入

我們先進(jìn)行HTTP問答接入,這種接入方式需要等大模型完全回答完問題,將答案生成好之后,全部返回,這種方式的優(yōu)點(diǎn)是前后端交互方便,缺點(diǎn)是在用戶看來等待好長(zhǎng)時(shí)間才返回答案。下面開始上代碼

1.配置文件

代碼如下(示例):

sili:
  apiKey: sk-xxxxxxxxx-your-api-key
  baseUrl: https://api.siliconflow.cn/v1/

2.創(chuàng)建實(shí)例類

會(huì)看第一節(jié)的官方API指南,根據(jù)官方的請(qǐng)求體和響應(yīng),構(gòu)造實(shí)體類,我這邊不展開篇幅

3.創(chuàng)建調(diào)用外部API接口

這里將普通調(diào)用和流模式均展示在了下面,流式調(diào)用需要用@Streaming注解。這里不使用openFeign是因?yàn)閛penFeign不支持流式響應(yīng)的接收。

package com.example.awesome.feign.siliconflow;

import com.example.awesome.feign.siliconflow.req.ChatCompletionReq;
import com.example.awesome.feign.siliconflow.res.ChatCompletionRes;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.HeaderMap;
import retrofit2.http.POST;
import retrofit2.http.Streaming;

import java.util.Map;

/**
 * 定義與 SiliconFlow API 交互的 Retrofit 接口。
 */
public interface SiliconFlowApiService {

    /**
     * 發(fā)起同步的聊天完成請(qǐng)求。
     *
     * @param chatCompletionReq 請(qǐng)求體,包含聊天完成所需的參數(shù)。
     * @param headers           HTTP 請(qǐng)求頭,包括授權(quán)信息等。
     * @return 返回一個(gè) {@link Call} 對(duì)象,用于執(zhí)行HTTP請(qǐng)求并獲取 {@link ChatCompletionRes} 響應(yīng)。
     */
    @POST("/chat/completions")
    Call<ChatCompletionRes> getChatCompletions(
        @Body ChatCompletionReq chatCompletionReq,
        @HeaderMap Map<String, String> headers
    );

    /**
     * 發(fā)起流式的聊天完成請(qǐng)求。
     *
     * @param chatCompletionReq 請(qǐng)求體,包含聊天完成所需的參數(shù)。
     * @param headers           HTTP 請(qǐng)求頭,包括授權(quán)信息等。
     * @return 返回一個(gè) {@link Call} 對(duì)象,用于執(zhí)行HTTP請(qǐng)求并獲取 {@link ResponseBody} 流式響應(yīng)。
     * @see Streaming 表示該請(qǐng)求是流式的,不會(huì)將整個(gè)響應(yīng)體加載到內(nèi)存中。
     */
    @POST("/chat/completions")
    @Streaming
    Call<ResponseBody> getChatCompletionsStream(
        @Body ChatCompletionReq chatCompletionReq,
        @HeaderMap Map<String, String> headers
    );
}

4.創(chuàng)建調(diào)用服務(wù)service

package com.example.awesome.feign.siliconflow;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.example.awesome.feign.siliconflow.req.ChatCompletionReq;
import com.example.awesome.feign.siliconflow.res.ChatCompletionRes;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.volcengine.ark.runtime.model.completion.chat.ChatCompletionResult;
import com.volcengine.ark.runtime.utils.ResponseBodyCallback;
import com.volcengine.ark.runtime.utils.SSE;
import io.reactivex.BackpressureStrategy;
import io.reactivex.Flowable;
import lombok.extern.slf4j.Slf4j;
import okhttp3.OkHttpClient;
import okhttp3.ResponseBody;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import retrofit2.Call;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * 實(shí)現(xiàn)與 SiliconFlow API 交互的服務(wù)類。
 */
@Service
@Slf4j
public class SiliconFlowApiServiceImpl {

    @Value("${sili.baseUrl}")
    private String SILI_API_URL;

    @Value("${sili.apiKey}")
    private String apiKey;

    private Retrofit retrofit;
    
    private SiliconFlowApiService apiService;
 
    /**
     * 初始化 Retrofit 客戶端和 API 服務(wù)。
     */
    @PostConstruct
    public void init() {
        log.info("SiLiApiService init");
        retrofit = new Retrofit.Builder()
                .baseUrl(SILI_API_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava3CallAdapterFactory.create())
                .build();
        this.apiService = retrofit.create(SiliconFlowApiService.class);
    }


    /**
     * 發(fā)起同步的聊天完成請(qǐng)求,返回非流式的響應(yīng)。
     *
     * @param req 請(qǐng)求體,包含聊天完成所需的參數(shù)。
     * @return 返回 {@link ChatCompletionRes} 對(duì)象,表示API的響應(yīng)結(jié)果。
     */
    public ChatCompletionRes getChatCompletions(ChatCompletionReq req) {
        Map<String, String> headers = new HashMap<>();
        headers.put("Authorization", "Bearer " + apiKey);
        headers.put("Content-Type", "application/json");

        try {
            // 執(zhí)行HTTP請(qǐng)求并獲取響應(yīng)
            Call<ChatCompletionRes> call = this.apiService.getChatCompletions(req, headers);
            return call.execute().body();
        } catch (Exception e) {
            // 記錄錯(cuò)誤日志并拋出運(yùn)行時(shí)異常
            log.error("SiLiApiService error: {}", e.getMessage(), e);
            throw new RuntimeException("SiLiApiService error: " + e.getMessage(), e);
        }
    }

}

5.業(yè)務(wù)層service選擇模型,并調(diào)用剛剛的服務(wù)

package com.example.awesome.service;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.example.awesome.feign.siliconflow.SiliconFlowApiServiceImpl;
import com.example.awesome.feign.siliconflow.req.ChatCompletionReq;
import com.example.awesome.feign.siliconflow.req.Message;
import com.example.awesome.feign.siliconflow.res.ChatCompletionRes;
import com.volcengine.ark.runtime.model.completion.chat.ChatCompletionResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.websocket.Session;
import java.util.ArrayList;
import java.util.List;

/**
 * 提供與 SiliconFlow API 交互的服務(wù)類。
 */
@Service
@Slf4j
public class SiliconFlowService {

    @Resource
    private SiliconFlowApiServiceImpl siliconFlowApiServiceImpl;

    /**
     * 發(fā)起同步的聊天完成請(qǐng)求,返回用戶的回答內(nèi)容。
     *
     * @param question 用戶提出的聊天問題。
     * @return 返回用戶的回答內(nèi)容。
     * @throws RuntimeException 如果請(qǐng)求過程中發(fā)生異常,拋出運(yùn)行時(shí)異常。
     */
    public String getChatCompletions(String question) {
        // 創(chuàng)建 ChatCompletionReq 對(duì)象
        ChatCompletionReq req = new ChatCompletionReq();

        // 設(shè)置模型名稱
        req.setModel("deepseek-ai/DeepSeek-R1");

        // 創(chuàng)建消息列表
        List<Message> messages = new ArrayList<>();

        // 添加用戶消息
        messages.add(Message.builder().role("user").content(question).build());

        // 設(shè)置請(qǐng)求的消息列表
        req.setMessages(messages);

        try {
            // 發(fā)起同步請(qǐng)求并獲取響應(yīng)
            ChatCompletionRes chatCompletions = siliconFlowApiServiceImpl.getChatCompletions(req);

            // 返回第一個(gè)選擇的回答內(nèi)容
            return chatCompletions.getChoices().get(0).getMessage().getContent();
        } catch (Exception e) {
            // 記錄錯(cuò)誤日志并拋出運(yùn)行時(shí)異常
            log.error("siliconflow answer error: {}", e.getMessage(), e);
            throw new RuntimeException("網(wǎng)絡(luò)異常請(qǐng)重試", e);
        }
    }

}

三、WSS流式調(diào)用

1.先寫一個(gè)處理流式響應(yīng)的方法

在官方指南中可以看到,流式調(diào)用需要將入?yún)⒌?strong>stream設(shè)置為true

package com.example.awesome.feign.siliconflow;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.example.awesome.feign.siliconflow.req.ChatCompletionReq;
import com.example.awesome.feign.siliconflow.res.ChatCompletionRes;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.volcengine.ark.runtime.model.completion.chat.ChatCompletionResult;
import com.volcengine.ark.runtime.utils.ResponseBodyCallback;
import com.volcengine.ark.runtime.utils.SSE;
import io.reactivex.BackpressureStrategy;
import io.reactivex.Flowable;
import lombok.extern.slf4j.Slf4j;
import okhttp3.OkHttpClient;
import okhttp3.ResponseBody;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import retrofit2.Call;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * 實(shí)現(xiàn)與 SiliconFlow API 交互的服務(wù)類。
 */
@Service
@Slf4j
public class SiliconFlowApiServiceImpl {

    @Value("${sili.baseUrl}")
    private String SILI_API_URL;

    @Value("${sili.apiKey}")
    private String apiKey;

    private Retrofit retrofit;
    private SiliconFlowApiService apiService;
    private static final ObjectMapper mapper = defaultObjectMapper();


    /**
     * 創(chuàng)建并配置 ObjectMapper 實(shí)例。
     *
     * @return 配置好的 ObjectMapper 實(shí)例。
     */
    public static ObjectMapper defaultObjectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
        return mapper;
    }

    /**
     * 初始化 Retrofit 客戶端和 API 服務(wù)。
     */
    @PostConstruct
    public void init() {
        log.info("SiLiApiService init");
        retrofit = new Retrofit.Builder()
                .baseUrl(SILI_API_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava3CallAdapterFactory.create())
                .build();
        this.apiService = retrofit.create(SiliconFlowApiService.class);
    }

    /**
     * 將 Call<ResponseBody> 轉(zhuǎn)換為 Flowable<T>,并進(jìn)行數(shù)據(jù)映射。
     *
     * @param apiCall API 調(diào)用對(duì)象。
     * @param cl      目標(biāo)類類型。
     * @param <T>     泛型類型。
     * @return Flowable<T> 對(duì)象。
     */
    public static <T> Flowable<T> stream(Call<ResponseBody> apiCall, Class<T> cl) {
        return stream(apiCall).map((sse) -> {
//            log.info("SiLiApiService stream: {}", sse.getData());
            return mapper.readValue(sse.getData(), cl);
        });
    }

    /**
     * 將 Call<ResponseBody> 轉(zhuǎn)換為 Flowable<SSE>,并處理響應(yīng)。
     *
     * @param apiCall  API 調(diào)用對(duì)象。
     * @param emitDone 是否在流結(jié)束時(shí)發(fā)送完成信號(hào)。
     * @return Flowable<SSE> 對(duì)象。
     */
    public static Flowable<SSE> stream(Call<ResponseBody> apiCall, boolean emitDone) {
        return Flowable.create((emitter) -> {
            apiCall.enqueue(new ResponseBodyCallback(emitter, emitDone));
        }, BackpressureStrategy.BUFFER);
    }

    /**
     * 將 Call<ResponseBody> 轉(zhuǎn)換為 Flowable<SSE>,默認(rèn)不發(fā)送完成信號(hào)。
     *
     * @param apiCall API 調(diào)用對(duì)象。
     * @return Flowable<SSE> 對(duì)象。
     */
    public static Flowable<SSE> stream(Call<ResponseBody> apiCall) {
        return stream(apiCall, false);
    }

    /**
     * 發(fā)起流式的聊天完成請(qǐng)求,返回流式的響應(yīng)。
     *
     * @param request 請(qǐng)求體,包含聊天完成所需的參數(shù)。
     * @return 返回 {@link Flowable<ChatCompletionResult>} 對(duì)象,表示流式的API響應(yīng)結(jié)果。
     */
    public Flowable<ChatCompletionResult> streamChatCompletion(ChatCompletionReq request) {
        Map<String, String> headers = new HashMap<>();
        headers.put("Authorization", "Bearer " + apiKey);
        headers.put("Content-Type", "application/json");
        request.setStream(Boolean.TRUE);
        return stream(this.apiService.getChatCompletionsStream(request, headers), ChatCompletionResult.class);
    }
}

2.業(yè)務(wù)層service調(diào)用

package com.example.awesome.service;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.example.awesome.feign.siliconflow.SiliconFlowApiServiceImpl;
import com.example.awesome.feign.siliconflow.req.ChatCompletionReq;
import com.example.awesome.feign.siliconflow.req.Message;
import com.example.awesome.feign.siliconflow.res.ChatCompletionRes;
import com.volcengine.ark.runtime.model.completion.chat.ChatCompletionResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.websocket.Session;
import java.util.ArrayList;
import java.util.List;

/**
 * 提供與 SiliconFlow API 交互的服務(wù)類。
 */
@Service
@Slf4j
public class SiliconFlowService {

    @Resource
    private SiliconFlowApiServiceImpl siliconFlowApiServiceImpl;

    /**
     * 發(fā)起流式的聊天完成請(qǐng)求,并將結(jié)果通過 WebSocket 會(huì)話發(fā)送給客戶端。
     *
     * @param question 用戶提出的聊天問題。
     * @param session  WebSocket 會(huì)話對(duì)象。
     * @throws RuntimeException 如果請(qǐng)求過程中發(fā)生異常,拋出運(yùn)行時(shí)異常。
     */
    public void getChatCompletionsStream(String question, Session session) {
        // 創(chuàng)建 ChatCompletionReq 對(duì)象
        ChatCompletionReq req = new ChatCompletionReq();

        // 設(shè)置模型名稱
        req.setModel("deepseek-ai/DeepSeek-R1");

        // 創(chuàng)建消息列表
        List<Message> messages = new ArrayList<>();

        // 添加用戶消息
        messages.add(Message.builder().role("user").content(question).build());

        // 設(shè)置請(qǐng)求的消息列表
        req.setMessages(messages);

        try {
            // 發(fā)起流式請(qǐng)求并處理響應(yīng)
            siliconFlowApiServiceImpl.streamChatCompletion(req)
                    .doOnError(e -> log.error("Error in streamChatCompletion: ", e))
                    .blockingForEach(chunk -> {
                        if (!chunk.getChoices().isEmpty()) {
                            chunk.getChoices().forEach(choice -> {
                                // 如果完成原因?yàn)榭栈虿皇?"stop",則繼續(xù)處理
                                if (StrUtil.isNotEmpty(choice.getFinishReason()) && StrUtil.equals(choice.getFinishReason(), "stop")) {
                                    // 發(fā)送 "answer-stop" 信號(hào)
                                    session.getAsyncRemote().sendText("answer-stop");
                                    return;
                                }
                                // 如果消息內(nèi)容為空,則跳過
                                if (ObjectUtil.isEmpty(choice.getMessage().getContent())) {
                                    return;
                                }
                                // 同步發(fā)送消息內(nèi)容
                                synchronized (session) {
                                    try {
                                        session.getBasicRemote().sendText(choice.getMessage().getContent());
                                    } catch (Exception e) {
                                        // 記錄錯(cuò)誤日志并拋出運(yùn)行時(shí)異常
                                        log.error("answerByStream error: {}", e.getMessage(), e);
                                        throw new RuntimeException(e);
                                    }
                                }
                            });
                        }
                    });
        } catch (Exception e) {
            // 記錄錯(cuò)誤日志并拋出運(yùn)行時(shí)異常
            log.error("siliconflow answer error: {}", e.getMessage(), e);
            throw new RuntimeException("網(wǎng)絡(luò)異常請(qǐng)重試", e);
        }
    }
}

3.WebSocket調(diào)用

在onMessage方法中,在session中寫入流式調(diào)用的響應(yīng),即可實(shí)現(xiàn)wss流式接入,輸出就類似于官方的一字一字輸出。在用戶看來減少了等待時(shí)間,十分友好。

package com.example.awesome.controller.webSocket;

import cn.hutool.core.util.ObjectUtil;
import com.example.awesome.service.SiliconFlowService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;

/**
 * WebSocket 服務(wù)器端點(diǎn),處理與客戶端的 WebSocket 連接。
 */
@Slf4j
@ServerEndpoint(value = "/websocket/test")
@Component
public class TestSocketServer {

    private static SiliconFlowService siliconFlowService;

    /**
     * 注入 SiliconFlowService 實(shí)例。
     *
     * @param siliconFlowService SiliconFlowService 實(shí)例。
     */
    @Autowired
    public void setSiliconFlowService(SiliconFlowService siliconFlowService) {
        this.siliconFlowService = siliconFlowService;
    }

    /**
     * 處理 WebSocket 連接打開事件。
     *
     * @param session 當(dāng)前 WebSocket 會(huì)話。
     */
    @OnOpen
    public void onOpen(Session session) {
        log.info("新連接: {}", session.getId());
    }

    /**
     * 處理接收到的 WebSocket 消息。
     *
     * @param message 接收到的消息內(nèi)容。
     * @param session 當(dāng)前 WebSocket 會(huì)話。
     */
    @OnMessage
    public void onMessage(String message, Session session) {
        // 調(diào)用 SiliconFlowService 處理流式聊天完成請(qǐng)求
        siliconFlowService.getChatCompletionsStream(message, session);
    }

    /**
     * 處理 WebSocket 連接關(guān)閉事件。
     *
     * @param session 當(dāng)前 WebSocket 會(huì)話。
     */
    @OnClose
    public void onClose(Session session) {
        log.info("連接關(guān)閉: {}", session.getId());
    }

    /**
     * 處理 WebSocket 連接中的錯(cuò)誤事件。
     *
     * @param session 當(dāng)前 WebSocket 會(huì)話。
     * @param throwable 發(fā)生的異常。
     */
    @OnError
    public void onError(Session session, Throwable throwable) {
        log.error("Error on session: {}", session.getId(), throwable);
    }
}

總結(jié)

到此這篇關(guān)于JAVA接入DeepSeek滿血版的詳細(xì)指南(問答接入、流式接入雙模式)的文章就介紹到這了,更多相關(guān)JAVA接入DeepSeek滿血版內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用java批量寫入環(huán)境變量的實(shí)現(xiàn)

    使用java批量寫入環(huán)境變量的實(shí)現(xiàn)

    本文主要介紹了使用java批量寫入環(huán)境變量,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • 詳解快速搭建Spring Boot+Spring MVC

    詳解快速搭建Spring Boot+Spring MVC

    本篇文章主要介紹了詳解快速搭建Spring Boot+Spring MVC,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • Spring Boot整合Drools規(guī)則引擎實(shí)戰(zhàn)指南及最佳實(shí)踐

    Spring Boot整合Drools規(guī)則引擎實(shí)戰(zhàn)指南及最佳實(shí)踐

    Drools是Red Hat旗下的開源業(yè)務(wù)規(guī)則管理系統(tǒng)(BRMS),基于Rete模式匹配算法實(shí)現(xiàn)高效規(guī)則推理,這篇文章主要介紹了Spring Boot整合Drools規(guī)則引擎實(shí)戰(zhàn)指南及最佳實(shí)踐,需要的朋友可以參考下
    2025-04-04
  • 注冊(cè)HttpSessionListener失效的原因及解決方案

    注冊(cè)HttpSessionListener失效的原因及解決方案

    這篇文章主要介紹了注冊(cè)HttpSessionListener失效的原因及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • 如何避免在Java?中使用雙括號(hào)初始化

    如何避免在Java?中使用雙括號(hào)初始化

    這篇文章主要介紹了如何避免在Java中使用雙括號(hào)初始化,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • 關(guān)于Rabbitmq死信隊(duì)列及延時(shí)隊(duì)列的實(shí)現(xiàn)

    關(guān)于Rabbitmq死信隊(duì)列及延時(shí)隊(duì)列的實(shí)現(xiàn)

    這篇文章主要介紹了關(guān)于Rabbitmq死信隊(duì)列及延時(shí)隊(duì)列的實(shí)現(xiàn),TTL就是消息或者隊(duì)列的過期功能,當(dāng)消息過期就會(huì)進(jìn)到死信隊(duì)列,死信隊(duì)列和普通隊(duì)列沒啥區(qū)別,然后我們只需要配置一個(gè)消費(fèi)者來消費(fèi)死信隊(duì)列里面的消息就可以了,需要的朋友可以參考下
    2023-08-08
  • 基于java計(jì)算買賣股票的最佳時(shí)機(jī)

    基于java計(jì)算買賣股票的最佳時(shí)機(jī)

    這篇文章主要介紹了基于java計(jì)算買賣股票的最佳時(shí)機(jī),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 詳解使用Java代碼讀取并比較本地兩個(gè)txt文件區(qū)別

    詳解使用Java代碼讀取并比較本地兩個(gè)txt文件區(qū)別

    這篇文章主要為大家介紹了使用Java代碼讀取并比較本地兩個(gè)txt文件區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Java虛擬機(jī)性能優(yōu)化技巧和最佳實(shí)踐分享

    Java虛擬機(jī)性能優(yōu)化技巧和最佳實(shí)踐分享

    Java虛擬機(jī)(JVM)是Java平臺(tái)的核心組件,負(fù)責(zé)將Java字節(jié)碼轉(zhuǎn)換為機(jī)器碼并執(zhí)行,JVM性能直接影響Java應(yīng)用的響應(yīng)速度、吞吐量和資源利用率,本文將深入探討JVM性能優(yōu)化的關(guān)鍵技術(shù)和最佳實(shí)踐,幫助開發(fā)者和運(yùn)維人員提升Java應(yīng)用性能,需要的朋友可以參考下
    2025-05-05
  • RabbitMQ消息發(fā)送失敗的重試機(jī)制核心流程

    RabbitMQ消息發(fā)送失敗的重試機(jī)制核心流程

    本文介紹了基于NestJS和RabbitMQ的高可靠消息重試機(jī)制設(shè)計(jì),通過三級(jí)保障機(jī)制(預(yù)持久化、實(shí)時(shí)回調(diào)處理、定時(shí)任務(wù)補(bǔ)償)和靈活的存儲(chǔ)層(支持MySQL/Redis),確保消息在發(fā)送失敗時(shí)能夠可靠重試,感興趣的朋友跟隨小編一起看看吧
    2025-12-12

最新評(píng)論

琼海市| 西畴县| 万宁市| 临邑县| 邮箱| 东阿县| 万宁市| 和平县| 连南| 蛟河市| 于田县| 甘南县| 开远市| 大同市| 黄冈市| 武定县| 盐津县| 北票市| 靖安县| 资源县| 察哈| 德清县| 横峰县| 乐亭县| 温泉县| 会宁县| 安岳县| 资阳市| 体育| 临江市| 开封县| 南昌县| 崇文区| 古蔺县| 黄浦区| 扶绥县| 宣武区| 宜城市| 阿合奇县| 乌海市| 汝阳县|