On Github Domraider / phptour2016-slides
Copier coller le sous titre
							
/**
 * @param float $amount
 * @param string $user_id
 * @param string $auction_id
 */
class AuctionRaiseCommand extends Command {
	public static $handlers = [
  		AddUserToAuction::class,
  		CheckBidAmount::class,
  		NotifyParticipants::class
	];
  	public function __construct(array $attributes = []) {
      	// Validation
  		parent::__construct($attributes);
	}
}
							
						
													
class AddUserToAuction {
  	protected $auction;
  	public function __construct(AuctionRepository $auction) {
  		$this->auction = $auction;
	}
	public function handle(AuctionRaiseCommand $command) {
	}
}
							
						
						$bus = new SimpleBus(); $bus->handle(new AuctionRaiseCommand([ 'user_id'=> '', 'auction_id'=>'', 'amount' => '' ]));
							
class AuctionCommand implements RetryOnFail, IsHandledAsynchronously {
	public function getMaxRetry();
  	public function getWorker();
  	public function getRetryDelay($tried);
}
							
						
						
							via des middleware simplement ajoutés au bus
						$bus = new SimpleBus(); $bus->appendMiddleware(new AsynchronousMiddleware()); $bus->appendMiddleware(new RetryOnFailMiddleware());Plusieurs librairies dispo des plus simples : tactician et simplebus aux plus complexes : broadway et prooph
							
class Worker extends Console {
  protected $signature = 'worker {--bind=tcp://0.0.0.0:25001 listen on}';
  public function handle(Httpd $httpd) {
    $httpd->route('POST', '/', function(Request $request, Response $response) {
      	$response->send("OK")
          ->subscribeCallback(null, null, function() {
    		 SyncBus::handle($request->getCommand());
		  });
    })
    $httpd->listen($this->option('bind'));
  }
}
							
						
						
							Plusieurs librairies dispo des plus simples : tactician et simplebus aux plus complexes : broadway et prooph
													
$push = $zmq->push("tcp://pusher.svc.domraider.com:23499");
$push->send(new AuctionRaisedEvent());
							
						
												
$pull = $zmq->pull("tcp://0.0.0.0:23499");
$pull->subscribeCallback(function(AuctionRaisedEvent $event) {
	foreach($this->webSocket->sessions as $session) {
  		$session->send($event);
	}
});
							
						
						
							et pour la websocket allez voir thruway :)
						kubectl scale --replicas=5 rc AuctionWorker
Sasha Gitry
composer install cp docker/worker/Dockerfile . cp docker/worker/.dockerignore . docker build -t worker:$version . docker tag latest worker:$version docker push worker:$version docker push worker:latestUn codebase donne x builds dockers qui vont donner eux mêmes y replication controller dans kubernetes Besoin d'un build automatisé avec versionning une image docker par version, le build ne donne pas forcément lieu à un déploiement jenkins docker , circle ci