springboot+docker实现微服务的小例子

【任务】:

创建一个服务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!"字符串

java 复制代码
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 复制代码
java -jar XXX.jar 

来运行这个jar包


然后在IDEA里面安装docker插件。在项目根目录下编写Dockerfile文件

内容大致如下即可:

java 复制代码
# 使用一个基础的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"]

然后使用

bash 复制代码
docker build -t service_name .

来将项目打包成一个名为service_name的镜像。

打包好的镜像存放在本地的docker仓库里面,可以使用命令:

c 复制代码
docker images

查看本地镜像。


然后通过

c 复制代码
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包里面创建一个类:

java 复制代码
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里面有一些修改:

java 复制代码
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。

相关推荐
毕设源码-郭学长8 小时前
【开题答辩全过程】以 基于SpringBoot技术的美妆销售系统为例,包含答辩的问题和答案
java·spring boot·后端
N***H4868 小时前
springcloud springboot nacos版本对应
spring boot·spring·spring cloud
S***q3779 小时前
Spring Boot管理用户数据
java·spring boot·后端
BD_Marathon9 小时前
SpringBoot——辅助功能之切换web服务器
服务器·前端·spring boot
毕设源码-郭学长10 小时前
【开题答辩全过程】以 基于SpringBoot框架的民俗文化交流与交易平台的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
l***217810 小时前
SpringBoot Maven快速上手
spring boot·后端·maven
f***147710 小时前
SpringBoot实战:高效实现API限流策略
java·spring boot·后端
计算机毕设VX:Fegn089510 小时前
计算机毕业设计|基于springboot + vue动物园管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
BD_Marathon11 小时前
SpringBoot——多环境开发配置
java·spring boot·后端
Mr_sun.13 小时前
微服务框架课程
微服务·云原生·架构