public function send($replicaId = -1, $topics) { // Add header (ApiKey, ApiVersion, CorrelationId, ClientId) $data = $this->buildHeader(); // Add ReplicaId $data .= Packer::packSignedInt32($replicaId); // Add Topic count $data .= Packer::packSignedInt32(count($topics)); // Add Topics foreach ($topics as $topic => $partitions) { // Add Topic $data .= Packer::packStringSignedInt16($topic); // Add Partition count $data .= Packer::packSignedInt32(count($partitions)); // Add Partitions foreach ($partitions as $partition => $partitionParams) { // Add Partition $data .= Packer::packSignedInt32($partition); // Add Time $data .= Packer::packSignedInt64($partitionParams['Time']); // Add MaxNumberOfOffsets $data .= Packer::packSignedInt32($partitionParams['MaxNumberOfOffsets']); } } // Concat data length (32 bits) and data $data = Packer::packStringSignedInt32($data); // Send data return $this->client->write($data); }
public function send($consumerGroup, $topics) { // Add header (ApiKey, ApiVersion, CorrelationId, ClientId) $data = $this->buildHeader(); // Add ConsumerGroup $data .= Packer::packStringSignedInt16($consumerGroup); // Add Topic count $data .= Packer::packSignedInt32(count($topics)); // Add Topics foreach ($topics as $topic => $partitions) { // Add Topic $data .= Packer::packStringSignedInt16($topic); // Add Partition count $data .= Packer::packSignedInt32(count($partitions)); // Add Partitions foreach ($partitions as $partition) { // Add Partition $data .= Packer::packSignedInt32($partition); } } // Concat data length (32 bits) and data $data = Packer::packStringSignedInt32($data); // Send data return $this->client->write($data); }
public function send($groupId, $sessionTimeout, $memberId, $protocolType, $groupProtocols) { // Add header (ApiKey, ApiVersion, CorrelationId, ClientId) $data = $this->buildHeader(); // Add GroupId $data .= Packer::packStringSignedInt16($groupId); // Add SessionTimeout $data .= Packer::packSignedInt32($sessionTimeout); // Add MemberId $data .= Packer::packStringSignedInt16($memberId); // Add ProtocolType $data .= Packer::packStringSignedInt16($protocolType); // Add GroupProtocol count $data .= Packer::packSignedInt32(count($groupProtocols)); // Add GroupProtocols foreach ($groupProtocols as $protocolName => $protocolMetadata) { // Add ProtocolName $data .= Packer::packStringSignedInt16($protocolName); // Add ProtocolMetadata $data .= Packer::packStringSignedInt32($protocolMetadata); } // Concat data length (32 bits) and data $data = Packer::packStringSignedInt32($data); // Sent data return $this->client->write($data); }
public function send($replicaId = -1, $maxWaitTime = 100, $minBytes = 1024, $topics) { // Add header (ApiKey, ApiVersion, CorrelationId, ClientId) $data = $this->buildHeader(); // Add ReplicaId $data .= Packer::packSignedInt32($replicaId); // Add MaxWaitTime $data .= Packer::packSignedInt32($maxWaitTime); // Add MinBytes $data .= Packer::packSignedInt32($minBytes); // Add Topic count $data .= Packer::packSignedInt32(count($topics)); // Add Topics foreach ($topics as $topic => $partitions) { // Add Topic $data .= Packer::packStringSignedInt16($topic); // Add Partition count $data .= Packer::packSignedInt32(count($partitions)); // Add Partitions foreach ($partitions as $partition => $partitionParams) { // Add Partition $data .= Packer::packSignedInt32($partition); // Add Partition offset $data .= Packer::packSignedInt64($partitionParams['offset']); // Add PartitionMaxBytes $data .= Packer::packSignedInt32($partitionParams['max_bytes']); } } // Concat data length (32 bits) and data $data = Packer::packStringSignedInt32($data); // Send data return $this->client->write($data); }
public function send($groupId) { // Add header (ApiKey, ApiVersion, CorrelationId, ClientId) $data = $this->buildHeader(); // Add GroupId $data .= Packer::packStringSignedInt16($groupId); // Concat data length (32 bits) and data $data = Packer::packStringSignedInt32($data); // Send data return $this->client->write($data); }
/** * Build request header * @param array $options [description] * @return [type] [description] */ protected function buildHeader($options = []) { // Set API version if passed, else default to DEFAULT_API_VERSION $apiVersion = isset($options['api_version']) ? $options['api_version'] : self::DEFAULT_API_VERSION; // Set correlation ID if passed, else generate a random one $correlationId = isset($this->correlationId) ? $this->correlationId : mt_rand(); // Set client if passed, else default to DEFAULT_CLIENT $clientId = isset($options['client_id']) ? $options['client_id'] : self::DEFAULT_CLIENT; $header = Packer::packSignedInt16(static::API_KEY) . Packer::packSignedInt16($apiVersion) . Packer::packSignedInt32($correlationId) . Packer::packStringSignedInt16($clientId); return $header; }
public function send($requiredAcks, $timeout, $topics) { // Add header (ApiKey, ApiVersion, CorrelationId, ClientId) $data = $this->buildHeader(); // Add RequiredAcks $data .= Packer::packSignedInt16($requiredAcks); // Add Timeout $data .= Packer::packSignedInt32($timeout); // Add Topic count $data .= Packer::packSignedInt32(count($topics)); // Add Topics foreach ($topics as $topic => $partitions) { // Add Topic $data .= Packer::packStringSignedInt16($topic); // Add Partition count $data .= Packer::packSignedInt32(count($partitions)); // Add Partitions foreach ($partitions as $partition => $messages) { $data .= Packer::packSignedInt32($partition); $packedMessageSet = ''; foreach ($messages as $message) { if (!is_array($message)) { $offset = 0; // Producer does not know message offset, so we can fill with any value (we choose 0) $magicByte = 0; // Used to ensure backwards compatibility. Currently set to 0; $attributes = 0; $key = null; } else { $offset = array_key_exists('Offset', $message) ? $message['Offset'] : 0; $magicByte = array_key_exists('MagicByte', $message) ? $message['MagicByte'] : 0; $attributes = array_key_exists('Attributes', $message) ? $message['Attributes'] : 0; $attributes = 0; // TODO: handle compression $key = array_key_exists('Key', $message) ? $message['Key'] : null; } $packedMessage = Packer::packSignedInt8($magicByte); $packedMessage .= Packer::packSignedInt8($attributes); $packedMessage .= Packer::packStringSignedInt32($key); $packedMessage .= Packer::packStringSignedInt32($message); $packedMessage = Packer::packSignedInt32(crc32($packedMessage)) . $packedMessage; $packedMessageSet .= Packer::packSignedInt64($offset) . Packer::packStringSignedInt32($packedMessage); } // Add MessageSet $data .= Packer::packStringSignedInt32($packedMessageSet); } } // Concat data length (32 bits) and data $data = Packer::packStringSignedInt32($data); // Send data return $this->client->write($data); }
public function send($topics) { // Add header (ApiKey, ApiVersion, CorrelationId, ClientId) $data = $this->buildHeader(); // Add Topic count $data .= Packer::packSignedInt32(count($topics)); // Add Topics foreach ($topics as $topic) { // Add Topic $data .= Packer::packStringSignedInt16($topic); } // Concat data length (32 bits) and data $data = Packer::packStringSignedInt32($data); // Send the message return $this->client->write($data); }
public function send($groupId, $generationId, $memberId, $groupAssignments) { // Add header (ApiKey, ApiVersion, CorrelationId, ClientId) $data = $this->buildHeader(); // Add GroupId $data .= Packer::packStringSignedInt16($groupId); // Add GenerationId $data .= Packer::packSignedInt32($generationId); // Add MemberId $data .= Packer::packStringSignedInt16($memberId); // Add GroupAssignment count $data .= Packer::packSignedInt32(count($groupAssignments)); foreach ($groupAssignments as $groupAssignment) { // Add MemberId $data .= Packer::packStringSignedInt16($groupAssignment['MemberId']); // Add MemberAssignment $data .= Packer::packStringSignedInt32($groupAssignment['MemberAssignment']); } // Concat data length (32 bits) and data $data = Packer::packStringSignedInt32($data); // Send data return $this->client->write($data); }