code: def _get_channel(
      self,
      topic_pair: _TopicPair,
      src_party_id,
      src_role,
      dst_party_id,
      dst_role,
      mq=None,
      conf: dict = None,
  ):
      return MQChannel(
          host=mq.host,
          port=mq.port,
          tenant=topic_pair.tenant,
          namespace=topic_pair.namespace,
          send_topic=topic_pair.send,
          receive_topic=topic_pair.receive,
          src_party_id=src_party_id,
          src_role=src_role,
          dst_party_id=dst_party_id,
          dst_role=dst_role,
          credential=None,
          extra_args=conf,
      )
  
imports: import logging
  from typing import List, Optional
  from fate.arch.federation.api import PartyMeta
  from fate.arch.federation.message_queue import MessageQueueBasedFederation
  from ._mq_channel import DEFAULT_CLUSTER, DEFAULT_SUBSCRIPTION_NAME, DEFAULT_TENANT, MQChannel
  from ._pulsar_manager import PulsarManager
label_desc: Use image node_id 8 for calling the PulsarFederation obj's underlying member method code with example usage: obj._get_channel(topic_pair, src_party_id, src_role, dst_party_id, dst_role, mq, conf) and returns: MQChannel