Spring Cloudマイクロサービスアーキテクチャ入門から会議まで-サービス間呼び出しFeign
マイクロサービスの最も重要な機能は、サービス間呼び出しであり、各サービスは互いに依存している.例えば、電子商取引システムには注文サービスがあり、在庫サービスがあります.私たちが商品を購入するときは、注文書を生成し、在庫を減らす必要があります.ここではサービス間呼び出しFeignを使用します.
Feignはhttpリクエスト呼び出しの軽量レベルのフレームワークであり、JavaでHTTPリクエストメッセージをカプセル化することによって直接呼び出されることなく、Javaインタフェース注釈でHttpリクエストを呼び出すことができる.
次にmoduleを2つ、app-orderを1つ、app-storageを1つ新規に作成します.app-orderを呼び出し元とし,app-storageを呼び出し元とする.mybatis-plusをデータ処理フレームワークとして使用します.lombok簡略化コードの使用(ideaはlombokプラグインに従う必要があります.そうしないとエラーが発生します)
1.app-storageの作成
1.1 app-storageのpomを修正する.xmlファイル
1.2構成の変更
1.3テーブルの作成、データの事前作成
プリフォームデータ
1.4起動クラスの変更
1.5 storageテーブルに対応するentity,mapper,service,controllerの作成
mybatis-plusコード生成プラグインで以上のコードを生成することができます.紙面の問題はここで詳しく説明しません.詳細はgit倉庫を参照してください.
1.6 app-order呼び出し用の在庫削減インタフェースを作成する
controller
service
2.app-orderの作成
2.1 app-orderのpomを修正する.xmlファイル
内容はapp-storageと一致
2.2構成の変更
2.3表の作成
2.4起動クラスの変更
2.5テーブルorderテーブルに対応するentity,mapper,service,controllerの作成
mybatis-plusコード生成プラグインで以上のコードを生成することができます.紙面の問題はここで詳しく説明しません.詳細はgit倉庫を参照してください.
2.6 feign呼び出しインタフェースの作成
ここの@FeignClientのnameはapp-storageサービスのサービス名(つまりeurekaに登録されているサービス名)と書かれています
以下に宣言するdeductメソッドはapp-storageサービスのdeductインタフェースに対応する
2.7発注インタフェースの作成
controller
service
3.サービス検証の開始
server-eureka,app-storage,app-orderを順に起動
4.検証インタフェース
ブラウザでのアクセスhttp://127.0.0.1:9910/order/placeOrder/commitを選択して、orderテーブルとstorageテーブルをそれぞれ表示します.オーダーの生成と在庫の削減
Feignはhttpリクエスト呼び出しの軽量レベルのフレームワークであり、JavaでHTTPリクエストメッセージをカプセル化することによって直接呼び出されることなく、Javaインタフェース注釈でHttpリクエストを呼び出すことができる.
次にmoduleを2つ、app-orderを1つ、app-storageを1つ新規に作成します.app-orderを呼び出し元とし,app-storageを呼び出し元とする.mybatis-plusをデータ処理フレームワークとして使用します.lombok簡略化コードの使用(ideaはlombokプラグインに従う必要があります.そうしないとエラーが発生します)
1.app-storageの作成
1.1 app-storageのpomを修正する.xmlファイル
1.8
Hoxton.SR1
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-starter-openfeign
com.baomidou
mybatis-plus-boot-starter
3.3.1.tmp
mysql
mysql-connector-java
runtime
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
1.2構成の変更
#
server.port=9920
#
spring.application.name=app-storage
# eureka
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
eureka.instance.instance-id=${spring.application.name}:${server.port}
#
spring.datasource.url=jdbc:mysql://localhost:3306/storage?allowMultiQueries=true&serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
1.3テーブルの作成、データの事前作成
CREATE TABLE `tb_storage` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`commodity_code` varchar(255) DEFAULT NULL,
`count` int(11) DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY (`commodity_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
プリフォームデータ
INSERT INTO `storage`(`id`, `commodity_code`, `count`) VALUES (1, 'product-1', 9999999);
1.4起動クラスの変更
@SpringBootApplication
@EnableEurekaClient // eureka
@MapperScan("com.ipp.springcloud.appstorage.mapper") // mybatis
public class AppOrderApplication {
public static void main(String[] args) {
SpringApplication.run(AppOrderApplication.class, args);
}
}
1.5 storageテーブルに対応するentity,mapper,service,controllerの作成
mybatis-plusコード生成プラグインで以上のコードを生成することができます.紙面の問題はここで詳しく説明しません.詳細はgit倉庫を参照してください.
1.6 app-order呼び出し用の在庫削減インタフェースを作成する
controller
/**
*
* @param commodityCode
* @param count
* @return
*/
@RequestMapping(path = "/deduct")
public Boolean deduct(String commodityCode, Integer count) {
storageService.deduct(commodityCode, count);
return true;
}
service
@Override
public void deduct(String commodityCode, int count) {
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.setEntity(new Storage().setCommodityCode(commodityCode));
Storage storage = baseMapper.selectOne(wrapper);
storage.setCount(storage.getCount() - count);
baseMapper.updateById(storage);
}
2.app-orderの作成
2.1 app-orderのpomを修正する.xmlファイル
内容はapp-storageと一致
2.2構成の変更
#
server.port=9910
#
spring.application.name=app-order
# eureka
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
eureka.instance.instance-id=${spring.application.name}:${server.port}
#
spring.datasource.url=jdbc:mysql://localhost:3306/order?allowMultiQueries=true&serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
2.3表の作成
CREATE TABLE `tb_order` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` varchar(255) DEFAULT NULL,
`commodity_code` varchar(255) DEFAULT NULL,
`count` int(11) DEFAULT 0,
`money` int(11) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.4起動クラスの変更
@SpringBootApplication
@EnableEurekaClient // eureka
@EnableFeignClients // feign
@MapperScan("com.ipp.springcloud.apporder.mapper") // mybatis
public class AppOrderApplication {
public static void main(String[] args) {
SpringApplication.run(AppOrderApplication.class, args);
}
}
2.5テーブルorderテーブルに対応するentity,mapper,service,controllerの作成
mybatis-plusコード生成プラグインで以上のコードを生成することができます.紙面の問題はここで詳しく説明しません.詳細はgit倉庫を参照してください.
2.6 feign呼び出しインタフェースの作成
@FeignClient(name = "APP-STORAGE")
public interface StorageFeignService {
/**
*
* @param commodityCode
* @param count
* @return
*/
@GetMapping("storage/deduct")
Boolean deduct(@RequestParam("commodityCode") String commodityCode, @RequestParam("count") Integer count);
}
ここの@FeignClientのnameはapp-storageサービスのサービス名(つまりeurekaに登録されているサービス名)と書かれています
以下に宣言するdeductメソッドはapp-storageサービスのdeductインタフェースに対応する
2.7発注インタフェースの作成
controller
@RequestMapping("/placeOrder/commit")
public Boolean placeOrderCommit() {
orderServiceImpl.placeOrder("1", "product-1", 1);
return true;
}
service
@Autowired
private StorageFeignService storageFeignService;
@Override
public void placeOrder(String userId, String commodityCode, Integer count) {
BigDecimal orderMoney = new BigDecimal(count).multiply(new BigDecimal(5));
Order order = new Order()
.setUserId(userId)
.setCommodityCode(commodityCode)
.setCount(count)
.setMoney(orderMoney);
baseMapper.insert(order);
storageFeignService.deduct(commodityCode, count);
}
3.サービス検証の開始
server-eureka,app-storage,app-orderを順に起動
4.検証インタフェース
ブラウザでのアクセスhttp://127.0.0.1:9910/order/placeOrder/commitを選択して、orderテーブルとstorageテーブルをそれぞれ表示します.オーダーの生成と在庫の削減