Site updated: 2024-09-29 17:23:07
This commit is contained in:
1 parent
0c9c5a43d9
commit
b23d512b59
234 files changed
+445
-332
No files matched your search
@@ -8,7 +8,7 @@
|
||||
<author>
|
||||
<name>Hito Li</name>
|
||||
</author>
|
||||
<updated>2024-08-21T02:00:00.000Z</updated>
|
||||
<updated>2024-09-29T08:25:00.000Z</updated>
|
||||
<category term="hito" />
|
||||
<category term="無言" />
|
||||
<category term="博客" />
|
||||
@@ -17,6 +17,101 @@
|
||||
<category term="心得体会" />
|
||||
<category term="技术分享" />
|
||||
<category term="踩坑" />
|
||||
<entry>
|
||||
<id>https://hitoli.com/2024/09/29/dante-stunnel-clash-%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91/</id>
|
||||
<title>dante+stunnel+clash 科学上网</title>
|
||||
<link rel="alternate" href="https://hitoli.com/2024/09/29/dante-stunnel-clash-%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91/"/>
|
||||
<content type="html"><h4 id="前言"><a class="anchor" href="#前言">#</a> 前言</h4>
|
||||
<p>上次介绍了使用 squid+stunnel 的方案进行科学上网。但是那个方案只适合在浏览器上使用,并不能让其它 app 也可以科学上网。此次介绍使用 dante+stunnel+clash 的方式来代理其它 app 科学上网。</p>
|
||||
<h4 id="准备"><a class="anchor" href="#准备">#</a> 准备</h4>
|
||||
<p>一台可以访问外网的服务器,如香港的云主机并安装 Ubuntu 系统。</p>
|
||||
<h5 id="dante部分"><a class="anchor" href="#dante部分">#</a> dante 部分</h5>
|
||||
<ul>
|
||||
<li>1、安装</li>
|
||||
</ul>
|
||||
<p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt-get install -y dante-server</span><br></pre></td></tr></table></figure></p>
|
||||
<ul>
|
||||
<li>2、配置</li>
|
||||
</ul>
|
||||
<div class="note info">
|
||||
<p>修改 dante 配置<br />
|
||||
1、修改 /etc/danted.conf 文件,在末尾加入下面的配置<br />
|
||||
2、如果不需要用户密码认证,则把 socksmethod 改为 none<br />
|
||||
3、可以为认证单独添加一个用户<br />
|
||||
sudo useradd -r -s /bin/false proxy<br />
|
||||
sudo passwd proxy<br />
|
||||
4、重启服务<br />
|
||||
systemctl restart danted<br />
|
||||
5、查看状态<br />
|
||||
systemctl status danted</p>
|
||||
</div>
|
||||
<p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">logoutput:</span> <span class="string">syslog</span></span><br><span class="line"><span class="attr">internal:</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span> <span class="string">port</span> <span class="string">=</span> <span class="number">1080</span></span><br><span class="line"><span class="attr">external:</span> <span class="string">eth0</span></span><br><span class="line"></span><br><span class="line"><span class="attr">socksmethod:</span> <span class="string">username</span></span><br><span class="line"><span class="attr">clientmethod:</span> <span class="string">none</span></span><br><span class="line"></span><br><span class="line"><span class="attr">user.privileged:</span> <span class="string">root</span></span><br><span class="line"><span class="attr">user.notprivileged:</span> <span class="string">nobody</span></span><br><span class="line"></span><br><span class="line"><span class="string">client</span> <span class="string">pass</span> &#123;</span><br><span class="line"> <span class="attr">from: 0.0.0.0/0 to:</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span><span class="string">/0</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="string">socks</span> <span class="string">pass</span> &#123;</span><br><span class="line"> <span class="attr">from: 0.0.0.0/0 to:</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span><span class="string">/0</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p>
|
||||
<h5 id="stunnel服务端部分"><a class="anchor" href="#stunnel服务端部分">#</a> stunnel 服务端部分</h5>
|
||||
<ul>
|
||||
<li>1、安装(和 danted 装在一起)</li>
|
||||
</ul>
|
||||
<p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt-get install -y stunnel</span><br></pre></td></tr></table></figure></p>
|
||||
<ul>
|
||||
<li>2、生成 TLS/SSL 证书</li>
|
||||
</ul>
|
||||
<p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">openssl req -new -x509 -days 3650 -nodes -out stunnel.pem -keyout stunnel.pem</span><br></pre></td></tr></table></figure></p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>3、将证书 stunnel.pem 放到 /etc/stunnel/ 目录下</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>4、修改 stunnel 配置 (/etc/stunnle/stunnle.conf)</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">;</span> <span class="string">设置stunnel的pid文件路径</span></span><br><span class="line"><span class="string">pid</span> <span class="string">=</span> <span class="string">/etc/stunnel/stunnel.pid</span></span><br><span class="line"><span class="string">;</span> <span class="string">设置stunnel工作的用户(组)</span></span><br><span class="line"><span class="string">setuid</span> <span class="string">=</span> <span class="string">root</span></span><br><span class="line"><span class="string">setgid</span> <span class="string">=</span> <span class="string">root</span></span><br><span class="line"></span><br><span class="line"><span class="string">;</span> <span class="string">开启日志等级:emerg</span> <span class="string">(0),</span> <span class="string">alert</span> <span class="string">(1),</span> <span class="string">crit</span> <span class="string">(2),</span> <span class="string">err</span> <span class="string">(3),</span> <span class="string">warning</span> <span class="string">(4),</span> <span class="string">notice</span> <span class="string">(5),</span> <span class="string">info</span> <span class="string">(6),</span> <span class="string">or</span> <span class="string">debug</span> <span class="string">(7)</span></span><br><span class="line"><span class="string">debug</span> <span class="string">=</span> <span class="number">7</span></span><br><span class="line"><span class="string">;</span> <span class="string">日志文件路径</span></span><br><span class="line"><span class="string">output</span> <span class="string">=</span> <span class="string">/etc/stunnel/stunnel.log</span></span><br><span class="line"></span><br><span class="line"><span class="string">;</span> <span class="string">证书文件</span></span><br><span class="line"><span class="string">cert</span> <span class="string">=</span> <span class="string">/etc/stunnel/stunnel.pem</span></span><br><span class="line"><span class="string">;</span> <span class="string">私钥文件</span></span><br><span class="line"><span class="string">key</span> <span class="string">=</span> <span class="string">/etc/stunnel/stunnel.pemLine truncated
|
||||
<ul>
|
||||
<li>5、重启服务<br />
|
||||
systemctl restart stunnel4</li>
|
||||
<li>6、查看状态<br />
|
||||
systemctl status stunnel4</li>
|
||||
</ul>
|
||||
<h5 id="stunnel客户端部分"><a class="anchor" href="#stunnel客户端部分">#</a> stunnel 客户端部分</h5>
|
||||
<div class="note info">
|
||||
<p>可以安装在要代理的机器上,在需要代理的情况下再开启(代理地址填 127.0.0.1 加客户端监听端口)。也可以安装在国内的服务器上一直保持连接(代理信息填国内服务器 ip 加客户端监听端口)。本示例客户端为 ubuntu 系统</p>
|
||||
</div>
|
||||
<ul>
|
||||
<li>1、安装(和 danted 装在一起)</li>
|
||||
</ul>
|
||||
<p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt-get install -y stunnel</span><br></pre></td></tr></table></figure></p>
|
||||
<ul>
|
||||
<li>2、修改配置(/etc/stunnel/stunnel.conf)</li>
|
||||
</ul>
|
||||
<p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">[<span class="string">danted</span>]</span><br><span class="line"><span class="string">;</span> <span class="string">监听端口,用户的代理设置就是</span> <span class="string">stunnel-client-ip:1080</span></span><br><span class="line"><span class="string">accept</span> <span class="string">=</span> <span class="number">1080</span></span><br><span class="line"><span class="string">;</span> <span class="string">要连接到的stunnel</span> <span class="string">server的ip与端口</span></span><br><span class="line"><span class="string">connect</span> <span class="string">=</span> <span class="string">stunnel服务端ip:1081</span></span><br><span class="line"><span class="string">client</span> <span class="string">=</span> <span class="literal">yes</span></span><br><span class="line"><span class="string">;</span> <span class="string">需要验证对方发过来的证书</span></span><br><span class="line"><span class="string">;verify</span> <span class="string">=</span> <span class="number">2</span></span><br><span class="line"><span class="string">;</span> <span class="string">用来进行证书验证的文件</span></span><br><span class="line"><span class="string">;CAfile</span> <span class="string">=</span> <span class="string">/etc/stunnel/stunnel-server.pem</span></span><br></pre></td></tr></table></figure></p>
|
||||
<h5 id="clash部分"><a class="anchor" href="#clash部分">#</a> Clash 部分</h5>
|
||||
<ul>
|
||||
<li>
|
||||
<p>1、下载<br />
|
||||
<span class="exturl" data-url="aHR0cHM6Ly9naXRodWIuY29tL2NsYXNoLXZlcmdlLXJldi9jbGFzaC12ZXJnZS1yZXY/dGFiPXJlYWRtZS1vdi1maWxl"> Clash 客户端</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2、配置</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>新建订阅<br />
|
||||
<img data-src="https://nas.hitoli.com:18014/images/2024/09/29/1e11845b78cb.png" alt="" /></p>
|
||||
<p>编辑文件并写入以下配置<br />
|
||||
<img data-src="https://nas.hitoli.com:18014/images/2024/09/29/d4f21f01c4bc.jpg" alt="" /></p>
|
||||
<p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class=Line truncated
|
||||
开启代理和自启动<br />
|
||||
<img data-src="https://nas.hitoli.com:18014/images/2024/09/29/d6c8dfeb5997.png" alt="" /></p>
|
||||
<div class="note primary">
|
||||
<p>至次运行 clash 的电脑就可以愉快的科学上网了,并且还可以代理同局域网的其它电脑科学上网。</p>
|
||||
</div>
|
||||
</content>
|
||||
<category term="生活" scheme="https://hitoli.com/categories/%E7%94%9F%E6%B4%BB/" />
|
||||
<category term="技术分享" scheme="https://hitoli.com/categories/%E7%94%9F%E6%B4%BB/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/" />
|
||||
<category term="stunnel" scheme="https://hitoli.com/tags/stunnel/" />
|
||||
<category term="科学上网" scheme="https://hitoli.com/tags/%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91/" />
|
||||
<category term="dante" scheme="https://hitoli.com/tags/dante/" />
|
||||
<category term="clash" scheme="https://hitoli.com/tags/clash/" />
|
||||
<category term="socket" scheme="https://hitoli.com/tags/socket/" />
|
||||
<updated>2024-09-29T08:25:00.000Z</updated>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>https://hitoli.com/2024/08/21/%E5%88%A9%E7%94%A8jackson%E5%AF%B9%E8%BF%94%E5%9B%9E%E6%95%B0%E6%8D%AE%E5%81%9A%E5%AD%97%E5%85%B8%E8%BD%AC%E6%8D%A2/</id>
|
||||
<title>利用jackson对返回数据做字典转换</title>
|
||||
@@ -508,9 +603,9 @@
|
||||
</content>
|
||||
<category term="生活" scheme="https://hitoli.com/categories/%E7%94%9F%E6%B4%BB/" />
|
||||
<category term="技术分享" scheme="https://hitoli.com/categories/%E7%94%9F%E6%B4%BB/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/" />
|
||||
<category term="squid" scheme="https://hitoli.com/tags/squid/" />
|
||||
<category term="stunnel" scheme="https://hitoli.com/tags/stunnel/" />
|
||||
<category term="科学上网" scheme="https://hitoli.com/tags/%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91/" />
|
||||
<category term="squid" scheme="https://hitoli.com/tags/squid/" />
|
||||
<category term="代理" scheme="https://hitoli.com/tags/%E4%BB%A3%E7%90%86/" />
|
||||
<updated>2023-09-09T08:48:00.000Z</updated>
|
||||
</entry>
|
||||
@@ -616,47 +711,4 @@ Lombok supports: OpenJDK javac, ECJ</p>
|
||||
<category term="jsdelivr" scheme="https://hitoli.com/tags/jsdelivr/" />
|
||||
<updated>2023-06-30T17:15:00.000Z</updated>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>https://hitoli.com/2023/05/30/http%E8%AF%B7%E6%B1%82%E4%B9%8BrestTemplate%E9%85%8D%E7%BD%AE%E8%B6%85%E6%97%B6%E6%97%B6%E9%97%B4/</id>
|
||||
<title>http请求之restTemplate配置超时时间</title>
|
||||
<link rel="alternate" href="https://hitoli.com/2023/05/30/http%E8%AF%B7%E6%B1%82%E4%B9%8BrestTemplate%E9%85%8D%E7%BD%AE%E8%B6%85%E6%97%B6%E6%97%B6%E9%97%B4/"/>
|
||||
<content type="html"><h4 id="问题"><a class="anchor" href="#问题">#</a> 问题</h4>
|
||||
<p>http 请求发起后接收不到返回数据!!!【测试环境没出问题,发到正式环境就有问题】</p>
|
||||
<p>项目中通过 restTemplate 发起请求:<br />
|
||||
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">log.info(<span class="string">&quot;请求入参:&#123;&#125;&quot;</span>,JSON.toJSONString(request));<span class="comment">//打印日志1</span></span><br><span class="line"><span class="comment">// 配置http请求的连接超时时间和读取超时时间</span></span><br><span class="line"><span class="type">HttpsClientRequestFactory</span> <span class="variable">factory</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">HttpsClientRequestFactory</span>();</span><br><span class="line">factory.setConnectTimeout(<span class="number">60</span> * <span class="number">1000</span>);</span><br><span class="line">factory.setReadTimeout(<span class="number">5</span> * <span class="number">60</span> * <span class="number">1000</span>);</span><br><span class="line"><span class="type">RestTemplate</span> <span class="variable">restTemplate</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">RestTemplate</span>(factory);</span><br><span class="line">Result&lt;InventoryResult&gt; result = restTemplate.postForObject(address.concat(inventoryUrl), request, Result.class);</span><br><span class="line">log.info(<span class="string">&quot;库存同步,返回数据: &#123;&#125;&quot;</span>, result);<span class="comment">//打印日志2</span></span><br></pre></td></tr></table></figure></p>
|
||||
<ul>
|
||||
<li>打印日志 1 内容为:</li>
|
||||
</ul>
|
||||
<p>http 请求入参:{data=[{ productStatus=10,skuCode=null}], messageId=ewpfpr1t6ey5r6qj0su0w1h6rt73hr,token=vgvU5EJKuZbuHii7WH6pTINp40ZRicaqLz4dq5P7L6pDzWir8EEGZhCKPucQjljsw69EHasEy+iJfdTofDg==}</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>打印日志 2 内容为:没有打印内容!!!</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>最后发现是因为测试环境中数据量较小,http 请求后,很快能得到相应,而正式环境数据量较大,没有及时得到响应,连接或者读取超时!!!</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 id="解决方式"><a class="anchor" href="#解决方式">#</a> 解决方式</h4>
|
||||
<h6 id="第一种"><a class="anchor" href="#第一种">#</a> 第一种</h6>
|
||||
<ol>
|
||||
<li>
|
||||
<p>添加 HttpsClientRequestFactory 类,并继承 SimpleClientHttpRequestFactory<br />
|
||||
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * 兼容调Https接口</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">HttpsClientRequestFactory</span> <span class="keyword">extends</span> <span class="title class_">SimpleClientHttpRequestFactory</span> &#123;</span><br><span class="line"> </span><br><span class="line"> <span class="meta">@Override</span></span><br><span class="line"> <span class="keyword">protected</span> <span class="keyword">void</span> <span class="title function_">prepareConnection</span><span class="params">(HttpURLConnection connection, String httpMethod)</span></span><br><span class="line"> <span class="keyword">throws</span> IOException &#123;</span><br><span class="line"> <span class="keyword">if</span> (connection <span class=Line truncated
|
||||
</li>
|
||||
<li>
|
||||
<p>使用 restTemplate 发起请求前先设置连接和超时时间或者通过容器加载配置类然后设置超时时间<br />
|
||||
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//配置http请求的连接超时时间和读取超时时间</span></span><br><span class="line"><span class="type">HttpsClientRequestFactory</span> <span class="variable">factory</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">HttpsClientRequestFactory</span>();</span><br><span class="line">factory.setConnectTimeout(<span class="number">60</span> * <span class="number">1000</span>);</span><br><span class="line">factory.setReadTimeout(<span class="number">5</span> * <span class="number">60</span> * <span class="number">1000</span>);</span><br><span class="line"><span class="type">RestTemplate</span> <span class="variable">restTemplate</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">RestTemplate</span>(factory);</span><br><span class="line">BaseResult&lt;QueryInventoryResult&gt; result = restTemplate.postForObject(address.concat(inventoryUrl), request, Result.class);</span><br></pre></td></tr></table></figure><br />
|
||||
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">@Configuration</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">RestConfig</span> &#123;</span><br><span class="line"> </span><br><span class="line"> <span class="comment">//60 * 1000</span></span><br><span class="line"> <span class="meta">@Value(&quot;$&#123;rest.connectTimeout:60000&#125;&quot;)</span></span><br><span class="line"> <span class="keyword">private</span> <span class="type">int</span> connectTimeout;</span><br><span class="line"> </span><br><span class="line"> <span class="comment">//5 * 60 * 1000</span></span><br><span class="line"> <span class="meta">@Value(&quot;$&#123;rest.readTimeout:300000&#125;&quot;)</span></span><br><span class="line"> <span class="keyword">private</span> <span class="type">int</span> readTimeout;</span><br><span class="line"> </span><br><span class="line"> <span class="meta">@Bean</span></span><br><span class="line"> <span class="keyword">public</span> RestTemplate <span class="title function_">restTemplate</span><span class="params">()</span> &#123;</span><br><span class="line"> <span class="type">SimpleClientHttpRequestFactory</span> <span class="variable">simpleClientHttpRequestFactory</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">SimpleClientHttpRequestFactory</span>();</span><br><span class="line"> simpleClientHttpRequestFactory.setConnectTimeout(connectTimeout);</span><br><span class="line"> simpleClientHttpRequestFactory.setReadTimeout(readTimeout);</span><br><span class="line"> <span class="type">RestTemplate</span> <span class="variable">restTemplate</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">RestTemplate</span>(simpleClientHttpRequestFactory);</span><br><span class="line"> <span class="keyword">return</span> restTemplate;</span><br><span class="line"> &#125;</span><br></pre></td></tr></table></figure></p>
|
||||
</li>
|
||||
</ol>
|
||||
<h6 id="第二种"><a class="anchor" href="#第二种">#</a> 第二种</h6>
|
||||
<p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">@Configuration</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">RestConfig</span> &#123;</span><br><span class="line"> </span><br><span class="line"> <span class="comment">//60 * 1000</span></span><br><span class="line"> <span class="meta">@Value(&quot;$&#123;rest.connectTimeout:60000&#125;&quot;)</span></span><br><span class="line"> <span class="keyword">private</span> <span class="type">int</span> connectTimeout;</span><br><span class="line"> </span><br><span class="line"> <span class="comment">//5 * 60 * 1000</span></span><br><span class="line"> <span class="meta">@Value(&quot;$&#123;rest.readTimeout:300000&#125;&quot;)</span></span><br><span class="line"> <span class="keyword">private</span> <span class="type">int</span> readTimeout; </span><br><span class="line"> </span><br><span class="line"> <span class="meta">@Value(&quot;$&#123;rest.connectionRequestTimeout:300000&#125;&quot;)</span></span><br><span class="line"> <span class="keyword">private</span> <span class="type">int</span> connectionRequestTimeout; </span><br><span class="line"> </span><br><span class="line"> <span class="comment">/**</span></span><br><span class="line"><span class="comment"> * 使用 HttpComponentsClientHttpRequestFactory创建http请求(推荐)</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"> <span class="meta">@Bean</span></span><br><span class="line"> <span class="keyword">public</span> RestTemplate <span class="title function_">restTemplate</span><span class="params">()</span> &#123;</span><br><span class="line"> <span class="type">HttpComponentsClientHttpRequestFactory</span> <span class="variable">httpRequestFactory</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">HttpComponentsClientHttpRequestFactory</span>();</span><br><span class="line"> httpRequestFactory.setConnectionRequestTimeout(connectionRequestTimeout);</span&gLine truncated
|
||||
<h6 id="第三种基于第二种升级"><a class="anchor" href="#第三种基于第二种升级">#</a> 第三种(基于第二种升级)</h6>
|
||||
<p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">@Configuration</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">RestConfig</span> &#123;</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> <span class="comment">/**</span></span><br><span class="line"><span class="comment"> * 高并发采用HttpClient连接池</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"> <span class="meta">@Bean</span></span><br><span class="line"> <span class="keyword">public</span> RestTemplate <span class="title function_">restTemplate</span><span class="params">()</span> &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">RestTemplate</span>(httpRequestFactory());</span><br><span class="line"> &#125;</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> <span class="meta">@Bean</span></span><br><span class="line"> <span class="keyword">public</span> ClientHttpRequestFactory <span class="title function_">httpRequestFactory</span><span class="params">()</span> &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">HttpComponentsClientHttpRequestFLine truncated
|
||||
</content>
|
||||
<category term="工作" scheme="https://hitoli.com/categories/%E5%B7%A5%E4%BD%9C/" />
|
||||
<category term="解决问题" scheme="https://hitoli.com/categories/%E5%B7%A5%E4%BD%9C/%E8%A7%A3%E5%86%B3%E9%97%AE%E9%A2%98/" />
|
||||
<category term="RestTemplate" scheme="https://hitoli.com/tags/RestTemplate/" />
|
||||
<updated>2023-05-30T09:20:00.000Z</updated>
|
||||
</entry>
|
||||
</feed>
|
||||
Reference in new issue
Block a user