Swoft初体验
Swoft初体验如何利用swoft搭建一个微服务框架如何利用swoft搭建一个微服务框架环境依赖 ,swoft首先是一个环境的问题,像普通的web服务都是lnmp,但是swoft就充当了其中的n,所以只要安装好其他部分就可以了,具体的看网上其他攻略,swoft就用composer下载就好了;composer create-project swoft/swoft swoft;启动服务php bin/
Swoft初体验
如何利用swoft搭建一个微服务框架
- 环境依赖 ,swoft首先是一个环境的问题,像普通的web服务都是lnmp,这里的swoft就充当了其中的n,其他环境具体的看网上其他攻略,下面我们来安装swoft,用composer下载就好了;
composer create-project swoft/swoft swoft;
- 启动服务
php bin/swoft http:start
默认的不是80 端口,这里我改了./app/bean.php里面的httpServer参数.
访问网站,有绿色的swoft字体显示就表示成功了,其他表示失败
2.搭建微服务
1、首先把原来的swoft项目copy一下,作为客户端B
2、在项目A配置服务端的配置,修改./app/bean的rpcServer参数,
'rpcServer' => [
'class' => ServiceServer::class,
'port' => 18308,
],
如果你想让一个项目在监听http请求的时候还作微服务,那么可以修改httpServer
''httpServer' => [
'class' => HttpServer::class,
'port' => 8848,
'listener' => [
'rpc' => bean('rpcServer'),
// 'tcp' => bean('tcpServer'),
],
******
3、写一些逻辑代码,证明我们的东西没有错
这个rpc的代码主要分两部分,一个是service(逻辑代码)还有interface(定义接口规范)。
找到./app/Rpc/lib/下面,创建自己的interface代码,这里可以去copy一下原有的UserInterface.php,然后修改里面的接口名和一些代码就好了,这里我加了一个新的接口规范
/**
* @return int
*/
public function getOne(): string;
然后到./app/Rpc/Service/下面写service代码,这里也可以copy一下原有的Uservice.php他有两个,他还有一个V2,是另外一种写法
/**
* @return int
*/
public function getOne(): string
{
$one = '这个getOne';
return $one;
}
最后我的目录结构是这样的
启动服务端
php bin/swoft rpc:start
4、搭建客户端,进入刚才copy的项目B里面
修改./app/bean.php找到user和user.pool这两个配置,这是他原本项目里面的东西,主要是要告诉项目,让他知道,如果调用某个服务的时候要去哪个地方调用,我们这两个复制一下,然后改一下前面的user就好了注意:user里面的port要跟另外一个rpcServer的port配置一致
'goods' => [
'class' => ServiceClient::class,
'host' => '127.0.0.1',
'port' => 18308,
'setting' => [
'timeout' => 0.5,
'connect_timeout' => 1.0,
'write_timeout' => 10.0,
'read_timeout' => 0.5,
],
'packet' => bean('rpcClientPacket')
],
'goods.pool' => [
'class' => ServicePool::class,
'client' => bean('goods'),
],
配置好这个的还没完,我们还需要再定义一个interface,告诉项目对应的类大致是长什么样的copy一下另一个项目的goodsInterface.php到这个项目里面,也是同样放在Prc/lib/下面
这样就可以实验一下了
找到./app/Http/Controller/RpcController.php将服务给添加上去
/**
* @Reference(pool="goods.pool")
*
* @var GoodsInterface
*/
private $goodsService;
然后写对应的http接口
/**
* @RequestMapping("getOne")
*
* @return array
*/
public function getOne(): Response
{
$data = $this->goodsService->getOne();
return context()->getResponse()->withContentType(ContentType::JSON)->withContent($data);
}
访问http://localhost/rpc/getOne就ok了,如果没有改端口号的记得添加端口号哦
更多推荐
所有评论(0)