日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

spring 调用python_Spring http服务远程调用实现过程解析

發布時間:2023/12/19 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring 调用python_Spring http服务远程调用实现过程解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

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

項目結構如圖:

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

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包有:

com.xiazhi

spring-service-api

${project.version}

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-tomcat

javax.servlet

servlet-api

2.5

配置文件需要加上:

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

*/

@Service

public 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

*/

@Configuration

public 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 map = new HashMap<>(2);

factoryBean.setContexts(map);

factoryBean.setPort(9999);

factoryBean.setExecutor(taskExecutor);

return factoryBean;

}

}

啟動服務。

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

com.xiazhi

spring-service-api

${project.version}

org.springframework.boot

spring-boot-starter-web

配置文件:

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

*/

@Configuration

public 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

*/

@RestController

public 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服務遠程調用實現過程解析

本文地址: http://www.cppcns.com/jiaoben/python/318472.html

總結

以上是生活随笔為你收集整理的spring 调用python_Spring http服务远程调用实现过程解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。