Ejemplo n.º 1
0
def _make_dynamic_assigner(
    subscription: SubscriptionPath,
    transport: str,
    client_options: ClientOptions,
    credentials: Optional[Credentials],
    base_metadata: Optional[Mapping[str, str]],
) -> Assigner:
    if base_metadata is None:
        base_metadata = {}

    def assignment_connection_factory(
        requests: AsyncIterator[PartitionAssignmentRequest], ):
        assignment_client = PartitionAssignmentServiceAsyncClient(
            credentials=credentials,
            transport=transport,
            client_options=client_options)  # type: ignore
        return assignment_client.assign_partitions(requests,
                                                   metadata=list(
                                                       base_metadata.items()))

    return AssignerImpl(
        InitialPartitionAssignmentRequest(subscription=str(subscription),
                                          client_id=uuid4().bytes),
        GapicConnectionFactory(assignment_connection_factory),
    )
Ejemplo n.º 2
0
 def subscriber_factory(reset_handler: SubscriberResetHandler):
     return wire_subscriber.SubscriberImpl(
         InitialSubscribeRequest(subscription=str(subscription),
                                 partition=partition.value),
         _DEFAULT_FLUSH_SECONDS,
         GapicConnectionFactory(subscribe_connection_factory),
         reset_handler,
     )
    def factory(partition: Partition) -> AsyncSingleSubscriber:
        subscribe_client = SubscriberServiceAsyncClient(
            credentials=credentials,
            client_options=client_options,
            transport=transport)  # type: ignore
        cursor_client = CursorServiceAsyncClient(
            credentials=credentials,
            client_options=client_options,
            transport=transport)  # type: ignore
        final_metadata = merge_metadata(
            base_metadata,
            subscription_routing_metadata(subscription, partition))

        def subscribe_connection_factory(
                requests: AsyncIterator[SubscribeRequest]):
            return subscribe_client.subscribe(requests,
                                              metadata=list(
                                                  final_metadata.items()))

        def cursor_connection_factory(
            requests: AsyncIterator[StreamingCommitCursorRequest], ):
            return cursor_client.streaming_commit_cursor(
                requests, metadata=list(final_metadata.items()))

        subscriber = wire_subscriber.SubscriberImpl(
            InitialSubscribeRequest(subscription=str(subscription),
                                    partition=partition.value),
            _DEFAULT_FLUSH_SECONDS,
            GapicConnectionFactory(subscribe_connection_factory),
        )
        committer = CommitterImpl(
            InitialCommitCursorRequest(subscription=str(subscription),
                                       partition=partition.value),
            _DEFAULT_FLUSH_SECONDS,
            GapicConnectionFactory(cursor_connection_factory),
        )
        ack_set_tracker = AckSetTrackerImpl(committer)
        return SinglePartitionSingleSubscriber(
            subscriber,
            flow_control_settings,
            ack_set_tracker,
            nack_handler,
            add_id_to_cps_subscribe_transformer(partition,
                                                message_transformer),
        )
Ejemplo n.º 4
0
    def publisher_factory(partition: Partition):
        def connection_factory(requests: AsyncIterator[PublishRequest]):
            final_metadata = merge_metadata(
                metadata, topic_routing_metadata(topic, partition))
            return client.publish(requests,
                                  metadata=list(final_metadata.items()))

        return SinglePartitionPublisher(
            InitialPublishRequest(topic=str(topic), partition=partition.value),
            per_partition_batching_settings,
            GapicConnectionFactory(connection_factory),
        )
    def factory(partition: Partition) -> AsyncSingleSubscriber:
        final_metadata = merge_metadata(
            base_metadata, subscription_routing_metadata(subscription, partition)
        )

        def subscribe_connection_factory(requests: AsyncIterator[SubscribeRequest]):
            return subscribe_client_cache.get().subscribe(
                requests, metadata=list(final_metadata.items())
            )

        def cursor_connection_factory(
            requests: AsyncIterator[StreamingCommitCursorRequest],
        ):
            return cursor_client_cache.get().streaming_commit_cursor(
                requests, metadata=list(final_metadata.items())
            )

        def subscriber_factory(reset_handler: SubscriberResetHandler):
            return wire_subscriber.SubscriberImpl(
                InitialSubscribeRequest(
                    subscription=str(subscription), partition=partition.value
                ),
                _DEFAULT_FLUSH_SECONDS,
                GapicConnectionFactory(subscribe_connection_factory),
                reset_handler,
            )

        committer = CommitterImpl(
            InitialCommitCursorRequest(
                subscription=str(subscription), partition=partition.value
            ),
            _DEFAULT_FLUSH_SECONDS,
            GapicConnectionFactory(cursor_connection_factory),
        )
        ack_set_tracker = AckSetTrackerImpl(committer)
        return SinglePartitionSingleSubscriber(
            subscriber_factory,
            flow_control_settings,
            ack_set_tracker,
            nack_handler,
            add_id_to_cps_subscribe_transformer(partition, message_transformer),
        )