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。

相关推荐
小小的木头人1 小时前
Docker vs. containerd 深度剖析容器运行时
运维·docker·容器
weixin_443290691 小时前
【Docker】安装及使用
docker·容器·eureka
骆晨学长2 小时前
基于Springboot的助学金管理系统设计与实现
java·spring boot·后端
尘浮生2 小时前
Java项目实战II基于Java+Spring Boot+MySQL的大型商场应急预案管理系统(源码+数据库+文档)
java·开发语言·数据库·spring boot·spring·maven·intellij-idea
布说在见2 小时前
构建基于 Feign 的微服务:从 Eureka 到负载均衡的实践 --day05
微服务·eureka·负载均衡
it技术分享just_free2 小时前
基于 K8S kubernetes 的常见日志收集方案
linux·运维·docker·云原生·容器·kubernetes·k8s
尘浮生2 小时前
Java项目实战II基于Java+Spring Boot+MySQL的校园社团信息管理系统(源码+数据库+文档)
java·开发语言·数据库·spring boot·mysql·spring·maven
aidroid3 小时前
git github仓库管理
linux·运维·docker
三朝看客3 小时前
k8s自动清理pod脚本分享
linux·docker
it技术分享just_free3 小时前
基于 K8S kubernetes 搭建 安装 EFK日志收集平台
运维·docker·云原生·容器·kubernetes·k8s