【任务】:
创建一个服务A:service_hello
创建一个服务B:service_name
service_name负责提供一个api接口返回一个name字符串。
service_hello负责从这个接口获取name字符串,然后进行一个字符串拼接,在后面加一个hello,最后输出。
这就构成了一个最简单的微服务。微服务之间通过http的api接口可以互相交换数据。配合完成一个大工作。
Service_name微服务
首先实现service_name这个微服务:
可以直接利用这个网站:https://start.spring.io/ 创建一个springboot项目
在controller部分就简单的定义一个api:
功能非常简单,就是返回一个"Jerry!"字符串
package com.example.service_name.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MainController {
@GetMapping("/name")
public String name() {
return "Jerry!";
}
}
经过本地测试一切ok之后,将该项目通过maven打成一个jar包:
使用maven命令:mvn clean package
最后会在项目的target目录下形成一个jar包。可以直接通过
java -jar XXX.jar
来运行这个jar包
然后在IDEA里面安装docker插件。在项目根目录下编写Dockerfile文件
内容大致如下即可:
# 使用一个基础的Java镜像作为基础
FROM openjdk:22-slim
# 设置工作目录
WORKDIR /app
# 将应用程序的JAR文件复制到容器中
COPY target/service_name-0.0.1-SNAPSHOT.jar .
# 暴露应用程序的端口
EXPOSE 8081
# 设置启动命令
CMD ["java", "-jar", "service_name-0.0.1-SNAPSHOT.jar"]
然后使用
docker build -t service_name .
来将项目打包成一个名为service_name的镜像。
打包好的镜像存放在本地的docker仓库里面,可以使用命令:
docker images
查看本地镜像。
然后通过
docker run -p 8081:8081 service_name
命令可以直接运行service_name镜像,运行之后就成容器了。
这时候我们在浏览器输入localhost:8081/name就可以直接查看到字符串“Jerry!”输出到网页上了
那么目前service_name这个微服务我们就部署完毕!
Service_hello微服务
接下来我们就创建Service_hello这个微服务,来使用service_name提供的api完成功能
在Service_hello里面主要流程和前面一样,主要有几个小区别
首先会加一个配置类,因为需要用到RestTemplate去进行http通信。
所以在config包里面创建一个类:
package com.example.service_hello.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class AppConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
controller里面有一些修改:
package com.example.service_hello.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class MainController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/hello")
public String hello() {
//service_name的api地址
String url = "http://localhost:8081/name";
ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
return response.getBody() + ", Hello!";
}
}
最后在本地浏览器输入:
localhost:8081/hello
之后就可以看到浏览器的结果了:
【总结】
本文使用 docker技术,实现了一个非常简单的微服务架构demo。