日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Spring http服務遠程調用實現過程解析

瀏覽:21日期:2023-09-03 13:52:22

最近公司有個新的需求,寫了一個接口,想要把服務暴露出去,但是這個服務所在的進程是非web項目,(可以理解成schedule/batch等進程項目),所以沒有tomcat等容器,而且只有這一個服務,無論是加dubbo服務還是加tomcat等容器都顯得復雜了。那么應該如何將服務暴露出去?

經過網上搜索后,最終解決問題,記錄在此。

為了快速搭建,使用springboot來搭建項目:

項目結構如圖:

Spring http服務遠程調用實現過程解析

首先需要創建一個接口,服務的提供者和服務的調用方都依賴這個模塊。

package com.xiazhi.spring.service.api;import com.sun.istack.internal.NotNull;import com.sun.istack.internal.Nullable;/** * @author 趙帥 * @date 2020/6/8 */public interface IUserService { /** * 獲取姓名 * @return 姓名 */ String getName(); /** * 根據姓名獲取年齡 * @param name 姓名 * @return 年齡 */ @NotNull Integer getAge(@Nullable String name);}

然后在service模塊中,實現接口作為服務的提供方,需要依賴的jar包有:

<dependencies> <dependency> <groupId>com.xiazhi</groupId> <artifactId>spring-service-api</artifactId> <version>${project.version}</version> </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> </exclusions> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> </dependencies>

配置文件需要加上:

spring.main.web-application-type=none

實現接口:

package com.xiazhi.spring.service.impl;import com.sun.istack.internal.NotNull;import com.sun.istack.internal.Nullable;import com.xiazhi.spring.service.api.IUserService;import org.springframework.stereotype.Service;/** * @author 趙帥 * @date 2020/6/8 */@Servicepublic class UserServiceImpl implements IUserService { @Override public String getName() { return '張一'; } @Override @NotNull public Integer getAge(@Nullable String name) { if (''.equals(name)) { return 10; } return 18; }}

暴露服務:

package com.xiazhi.spring.service.config;import com.sun.net.httpserver.HttpHandler;import com.xiazhi.spring.service.api.IUserService;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.task.TaskExecutor;import org.springframework.remoting.httpinvoker.SimpleHttpInvokerServiceExporter;import org.springframework.remoting.support.SimpleHttpServerFactoryBean;import java.util.HashMap;import java.util.Map;/** * @author 趙帥 * @date 2020/6/8 */@Configurationpublic class HttpInvokerConfiguration { private final IUserService userService; private final TaskExecutor taskExecutor; public HttpInvokerConfiguration(IUserService userService, TaskExecutor taskExecutor) { this.userService = userService; this.taskExecutor = taskExecutor; } /** * 將IUserService服務暴露出去 */ @Bean public SimpleHttpInvokerServiceExporter serviceExporter() { SimpleHttpInvokerServiceExporter exporter = new SimpleHttpInvokerServiceExporter(); exporter.setService(userService); exporter.setServiceInterface(IUserService.class); return exporter; } /** * 為暴露的服務啟用http服務 * @return httpServer工廠類 */ @Bean public SimpleHttpServerFactoryBean serverFactoryBean() { SimpleHttpServerFactoryBean factoryBean = new SimpleHttpServerFactoryBean(); Map<String, HttpHandler> map = new HashMap<>(2); factoryBean.setContexts(map); factoryBean.setPort(9999); factoryBean.setExecutor(taskExecutor); return factoryBean; }}

啟動服務。

然后是服務的調用方,依賴有:

<dependencies> <dependency> <groupId>com.xiazhi</groupId> <artifactId>spring-service-api</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>

配置文件:

package com.xiazhi.spring.config;import com.xiazhi.spring.service.api.IUserService;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean;/** * @author 趙帥 * @date 2020/6/8 */@Configurationpublic class HttpServiceConfiguration { /** * 使用http代理工廠調用服務 * @return http代理工廠創建代理對象 */ @Bean public HttpInvokerProxyFactoryBean httpInvokerProxyFactoryBean() { HttpInvokerProxyFactoryBean factoryBean = new HttpInvokerProxyFactoryBean(); factoryBean.setServiceUrl('http://localhost:9999/userService'); factoryBean.setServiceInterface(IUserService.class); return factoryBean; }}

使用接口,調用方法:

package com.xiazhi.spring.controller;import com.xiazhi.spring.service.api.IUserService;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;/** * @author 趙帥 * @date 2020/6/8 */@RestControllerpublic class UserController { private final IUserService userService; public UserController(IUserService userService) { this.userService = userService; } @GetMapping('/test') public String test() { String name = userService.getName(); Integer age = userService.getAge(null); System.out.println(String.format('姓名:[%s],age:[%s]', name, age)); return name; }}

運行,調用test路徑測試調用結果。

項目完整結構:

Spring http服務遠程調用實現過程解析

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
麻豆国产一区| 亚洲性视频h| 欧美69视频| 日韩国产欧美| 精品一级视频| 青青青国产精品| 日韩一区精品视频| 日韩一级欧洲| 国产综合精品一区| 999国产精品视频| 国产日韩高清一区二区三区在线| 蜜桃91丨九色丨蝌蚪91桃色 | 亚洲高清激情| 六月婷婷综合| 亚洲黄色网址| 欧美三区四区| 99久久亚洲精品蜜臀| 久久影视一区| 亚洲福利国产| 成人免费电影网址| 国产主播一区| 国产91精品对白在线播放| 日韩国产一区二区| 亚洲成人不卡| 成人精品久久| 欧美肉体xxxx裸体137大胆| 亚洲午夜一级| 三级亚洲高清视频| 欧美日韩99| 国产在线视频欧美一区| av资源中文在线天堂| 天堂а√在线最新版中文在线| 三级精品视频| 免费在线观看成人| 亚洲毛片在线免费| 国产精品久一| 精品福利久久久| 一本大道色婷婷在线| 亚洲欧洲高清| 夜夜精品视频| 欧美在线91| 久久精品999| 久久亚洲精品中文字幕| 给我免费播放日韩视频| 国产成人调教视频在线观看| 国产伦久视频在线观看| 久久精品主播| 亚洲一区二区三区无吗| 美女精品一区二区| 色偷偷偷在线视频播放| 欧美在线资源| 欧美va天堂| 国产欧美成人| 国产在线欧美| 嫩草伊人久久精品少妇av杨幂| 日本少妇一区| 日韩国产在线观看一区| 久久精品一区二区三区中文字幕| 国产精品日韩欧美一区| 国产高清精品二区| 久久久777| 国产 日韩 欧美 综合 一区| 亚洲激情二区| 精品国产精品久久一区免费式| 国产视频一区在线观看一区免费| 日韩黄色av| 日韩一区电影| 免费黄网站欧美| 日韩免费视频| 亚洲综合婷婷| 日韩免费在线| 欧美日本久久| 欧美日韩免费观看一区=区三区| 欧美在线首页| 欧美精品一二| 国产成人免费视频网站视频社区| 美女被久久久| 成人久久一区| 国产精品乱战久久久| 亚洲国产日韩欧美在线| 精品国产精品国产偷麻豆| 亚洲另类黄色| 欧美1区免费| 精品国产亚洲一区二区三区大结局 | 欧美国产专区| 亚洲一区激情| 中文字幕人成乱码在线观看 | 日韩国产欧美一区二区三区| 日本午夜大片a在线观看| 国产丝袜一区| 日av在线不卡| 亚洲精品欧美| 欧美日本二区| 国产精品a级| 精品国产一区二区三区性色av| 国产精品一线| 精品美女在线视频| 精品丝袜在线| 99视频在线精品国自产拍免费观看| 激情91久久| 久久不射中文字幕| 蜜桃视频一区二区三区| 亚久久调教视频| 日本亚洲视频在线| 日韩高清在线不卡| 久久精品 人人爱| 国产精品白丝久久av网站| 老牛国内精品亚洲成av人片| 超碰成人av| 亚洲精品成人| 蜜桃一区二区三区在线观看| 日韩一区二区三区精品| 国产精品久久久久久久久久白浆 | 日韩av一二三| 欧美激情久久久久久久久久久| 高清在线一区| 日韩精品麻豆| 丝袜美腿亚洲色图| 国产日产一区| 日韩一区二区三区免费播放| 国产高清一区| 日本不卡高清视频| 六月丁香综合在线视频| 午夜精品久久久久久久久久蜜桃| 一区在线免费| 91久久精品无嫩草影院| 国产精品99视频| 国产视频一区在线观看一区免费| 亚洲精品美女91| 成人午夜在线| 国产视频一区三区| 亚洲色图综合| 国产在线一区不卡| 99国产精品久久久久久久| 日韩二区三区在线观看| yellow在线观看网址| 午夜在线播放视频欧美| 美女在线视频一区| 妖精视频成人观看www| 欧美aa在线视频| 国产日韩综合| 欧美激情三区| 中文亚洲欧美| 激情综合婷婷| 亚洲三级网址| 日本久久成人网| 综合在线一区| 亚洲不卡av不卡一区二区| 日韩在线麻豆| 久久九九精品| 久久国产麻豆精品| 午夜精品亚洲| 岛国精品一区| 日韩精品一区二区三区av| 视频福利一区| 麻豆精品视频在线观看| 夜久久久久久| 色爱综合网欧美| 日韩精品一区二区三区中文字幕| 日韩一区二区在线免费| 欧美亚洲自偷自偷| 欧美在线资源| 国产精品精品| 欧美一区成人| 伊人久久亚洲热| 成人精品动漫一区二区三区| 日韩一二三区在线观看| 秋霞影院一区二区三区| 久久精品一本| 欧美日韩精品一区二区三区视频| 国产综合视频| 成人亚洲精品| 国产欧美日韩精品高清二区综合区 | 蜜桃国内精品久久久久软件9| 免费视频一区二区三区在线观看| 亚洲制服欧美另类| 91久久亚洲| 精品三级久久| 91亚洲国产| 精品久久电影| 欧美aⅴ一区二区三区视频| 日韩在线成人| 亚洲精品影院在线观看| 欧美午夜不卡| 激情综合网址| 日韩精品久久久久久久电影99爱| 精品国产亚洲一区二区三区在线 | 国产伦精品一区二区三区千人斩 | 999在线观看精品免费不卡网站| 一本大道色婷婷在线| 麻豆久久一区二区| 国产欧美一区二区三区国产幕精品 | 在线亚洲观看| 久久高清免费| 久久蜜桃精品| 日本精品影院| 中文在线中文资源| 成人在线视频中文字幕| 日韩精品一区二区三区中文| 亚洲精一区二区三区|